QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3794|回复: 2
打印 上一主题 下一主题

Python OS模块学习(一)剪切

[复制链接]
字体大小: 正常 放大

102

主题

5

听众

913

积分

升级  78.25%

  • TA的每日心情
    开心
    2013-4-28 12:11
  • 签到天数: 160 天

    [LV.7]常住居民III

    群组数学软件学习

    跳转到指定楼层
    1#
    发表于 2012-7-10 13:49 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    3 V* \: _2 u4 ~0 X, g. o! T( O# s9 m
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作* L6 k( B! f: u2 h2 d9 m
    . {' \) O8 X# p- L9 b  \. W
       2 w6 E3 ?8 @8 M6 d2 _

    ' P8 {3 W/ f2 w8 S* b1.文件操作
    / F/ y5 S1 a, d/ Q( x5 {) Z0 `1 n2 [2 M
    build-in函数 open 实现文件创建, 打开, 修改文件的操作1 h5 ?! r( r# X' H% h9 s: v" Y) O7 f
    6 n% X$ M6 `9 d) [. G% D/ p
    ! t% A. j- e4 l7 }
    5 R. K- S  N& B% G! Z+ P
    import os
    " P6 C% o) r$ Q6 R( i) M- y
    ' z- ^( D( C' J. D& b! eimport string4 e* ~+ G; Z9 l
    . f" j* C& q# g" n6 k  [+ I
       : U& K. o/ D8 ^4 U

    3 {! H3 m) f2 H" M! Ydef replace(file, search_for, replace_with):6 B5 b. C9 N5 U0 [2 S

    ( X  h+ [8 U5 S; L6 H# replace strings in a text file$ Z" m/ [5 g; R% g  _

    : S. {  H9 z/ X# f0 u$ S: w3 ~8 G7 v   
    5 ~& ]  S$ H1 T$ w7 H) ^) f" i+ f. `  i8 r0 A  a2 x
    back = os.path.splitext(file)[0] + ".bak"
      p* o. Y, ~; B- B# h5 A/ d/ |, C7 |9 x4 X' `9 c
    temp = os.path.splitext(file)[0] + ".tmp"
    ' a. h# j0 Q8 c! ?% {5 I. g) ]8 g2 E. l, D6 V0 b  W1 Q
       ! r, h, L% D" y2 r. \6 C: d& f& F' [. r
    8 f3 b4 y) W3 D* i! V
    try:' T4 V  f6 ]  C) W1 G

    1 x* S. w/ p9 _  n* w' b# remove old temp file, if any. e3 }# |$ F! E& p) R

    3 R& ^( Z- G: M$ C7 Xos.remove(temp)
    ! J6 D3 h( e$ B0 y$ H4 G4 b  q+ p. @$ U& q
    except os.error:3 p! [/ n! U. j9 k5 f

    + ?. R$ C% s8 L8 Hpass$ w; u( \, k: [" T; c

    & C0 L' e& R* s7 @/ e, Z/ R   
    6 z0 r( A# m( r; L
    # Q: G, H" m, M2 [6 y% d/ {6 jfi = open(file) #( Y. T/ l) t% G/ c+ `  G
    8 |& y) [0 Q0 h7 j' C7 l) n; O) G0 T
    fo = open(temp, "w")        #
    2 N' D9 U1 |* O
    + @) q% ^- h6 D$ E# y   
      n! a* {( _) N0 d! Z7 G
    - b1 Q' t. g9 P- g6 E- I. c+ Ufor s in fi.readlines():
    4 `( w$ O; \  e' S
    # ^% P! J* y' u; t7 s7 D! Ifo.write(string.replace(s, search_for, replace_with))
    5 o- M8 f5 y' o3 n# R+ B
    * |& g; g1 g& e! |/ p   : J/ g$ w  n! b$ d4 z; Q9 I

    ; D$ N5 e& d3 O0 O4 A, I7 m3 ofi.close()
    4 c/ l6 Y6 L+ d& z9 Q* W. j: A+ D9 _$ x# v* i2 a- H
    fo.close()
    ( Y& Z7 u7 f& M3 W2 H1 E$ h4 {8 f$ T9 W+ l6 X, C- ^- r
       
    4 X$ y! `8 k1 x# v$ E+ [
    " t  t1 g/ t" w, z0 Mtry:& d2 i) y4 ~8 k% S! G# {

    + B4 [% e1 f, A- n+ }" H# remove old backup file, if any
    1 j' _* B/ O4 _% s$ b& r- E9 E7 W9 A! w/ [6 J  t: f2 ~
    os.remove(back)! e, @% @# V; U0 L6 h, F9 x( {
    4 m/ h. \6 A* J1 ]+ t$ u0 A
    except os.error:' N/ j/ Z8 b# C3 ^5 H/ w+ N$ O2 C2 W
    8 e! d* k) y  l9 @
    pass' |( w9 z, L: y  }7 a
    7 w; y7 J# K+ D' A2 V+ R
       9 Z+ X" Y: ?% |6 Q6 p

    ' f* v& E4 V5 a7 t4 `# rename original to backup...$ Z' {2 E) o' P/ ?2 f

    ! L. e1 b9 B6 |, [( s; G3 kos.rename(file, back)
    ( }) [* d1 H1 B+ X) O+ c" p5 F( m4 G! K1 k# ?0 H+ R
       
    " _- @: u" [9 B9 X! e1 G+ P5 X9 z* z$ U& A( W
    # ...and temporary to original
    / i" x* u1 m3 Y
    % \9 F4 C' H+ t% g# ]; k9 Gos.rename(temp, file)
    4 ]' z0 V5 M* q0 s6 f/ d. n2 t- _: X* i! d/ M
       ) j. a  ]) F; C* A: v
    + u0 p6 w6 `- ^8 [' s% w
    # try it out!
    ' ]0 @5 `5 p" h9 j5 Z  m* [# e- j( J/ Q# \. N- q0 F+ d
       
    ' D" f0 t7 i0 z% r) O
    , f0 X/ y: s; C: J* P- Pfile = "c:\samples\sample.txt"3 p- h1 n/ W1 C3 X
    6 X- C2 w, A- X* u' x$ V; g
       
    / F. J1 C  u; q. I4 v7 Z$ ?2 v  l% m3 ], X3 v* x2 x9 t  e
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena( U" U% M- ~' x( _8 G
    8 u7 @( \$ c1 J5 {6 w
    replace(file, "tjena", "hello")& y- s) J. i$ P/ L6 ]' z
    5 ]' S$ t3 ~/ z
       
    + o; h" ^; x- P% z
    6 E* H" d, i0 |5 b1 U, w8 r2. 目录操作% ]  z- ^/ _2 M. O: w* ~

    + K0 c( T0 o& v& T- p* R6 Y! Xos 模块包含了许多对目录操作的函数2 e# @; l' w+ F3 _/ `4 v* ~+ z  r
    $ b7 Q+ V# K1 `1 g0 l( O, G9 {* u8 M
    listdir 函数返回给定目录下的所有文件(包括目录)
    + g- I: R/ j) `# W; I: J5 r" z+ F0 t0 ~# Y) @! o& k
       
    % g4 j4 U& T# l: \* ?! z
    . u0 I/ a) \- a; D) Q/ N/ zimport os
    6 R% T8 u% s8 U. H
    7 z; e  |, c4 @for file in os.listdir("c:\qtest"):
    " I& W( C2 D* A0 e5 h/ v3 W9 _* A
    7 D7 J+ Y8 ]# @! zprint file* R6 |* {9 I" ]  A" _+ h
    5 L3 M( C, T5 x) a, ?, L5 B
       / t* N, t/ l5 F

    4 \( d8 ^* h5 y7 n+ z9 Wgetdir 获取当前目录
    4 L$ Q3 G0 R6 I, ]8 F6 N7 i7 W
    8 H. r8 k3 }- e' L0 \, @6 Tchdir 改变当前路径
    6 T( z, I1 U1 s  D3 ^  M
    , v- x: c1 X' A7 b! L) d) e* [   - R6 U* w3 h3 {, s1 x/ s
    : @6 {7 s# ]# i
    cwd = os.getcwd()
    2 @9 J8 f, j$ d; L: l0 g5 O5 l5 ?8 ^8 I" G
    print "1", cwd" n5 w+ O) q; J  g

    . Q" k. a: t0 q5 A- l! `# go down
    ' [3 D6 _% j% c2 @  d0 E9 V
    / v1 y2 h' {+ ]' w* Aos.chdir("c:\qtest")
    ( E1 e, U/ B3 _+ ]$ F' i0 c6 G: c' D6 ~7 n8 \- X: L, D% n
    print "2", os.getcwd(), y# h7 L: p: h0 a3 ?
    ( H8 x8 G* Q; |0 o- N0 J
    # go back up
    . s1 U/ Q  K" V: x3 f& t& w& Y- d6 C  }
    os.chdir(os.pardir)#返回当前目录的父目录
    . A6 w* ?! H. k2 p- @) x7 q/ {6 E7 j7 x: J0 g% q2 r  Q1 v
    print "3", os.getcwd()) o1 i. B7 F$ k; l

    # [* ^( H+ J/ ^: c; z" R% X   
    4 b/ s7 l) W% k; r0 ?0 O
    ; h$ v1 h% I0 G4 mmakedirs removedirs 生成和删除目录9 ^3 v4 N- x) y% H. z

    5 U% m5 |" o8 t5 B4 omakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除0 _3 o4 b5 `8 m$ _
    & ?% b* a' m+ C" ?
       
    ' d  x& ?% B2 [8 M9 @3 I
    / C) r3 q3 P/ }6 Z5 N& Vimport os$ W, O& y8 [+ G9 X* p% t
    $ y: W! n" K. c
    os.makedirs("c:\\test\\multiple\\levels"): Q# y9 h7 e* w5 x- ~) R2 D0 m
    % }) A% H& Y: e5 E) @( [* }
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    2 m" @" B. J0 A* n$ J7 O: w2 x
    - W% w. i$ t5 d; \0 l8 dfp.write("inspector praline")3 H" s) a. i* v0 [2 R  R. P

    * h3 Z/ C$ k' a7 v: u. s7 ]fp.close()
    & M: z' c, m8 y( P( R* Z
    0 q. C. V4 W+ y# i# q% I) P! n# remove the file
    6 P3 F: |+ a, K# Y8 h' T, l# W( Z0 U# g( D  V7 |, _  g
    os.remove("c:\\test\\multiple\\levels\\file.txt")5 X" P. U/ a, [6 g' g# X- A
    ) k/ j7 Z2 W* ]/ t: \4 Y
    # and all empty directories above it: V* ~! i1 t' U0 Y. N
    - @# c' v) ]4 o/ N
    os.removedirs("c:\\test\\multiple\\levels")4 n2 L6 p% B7 G: z: C0 ~$ T

    3 h5 l5 E; W7 r; u  U0 R* A   5 h) H/ \- y# g8 S/ ?5 H
    5 A2 s. r2 Y7 N2 _3 q7 e/ A8 D
    mkdir 和 rmdir只能处理单级目录操作.
    1 l, S5 o2 U* z; t, A& }0 z8 H3 N
    & N& e+ G" b0 m* |9 C若要删除非空目录, 可使用 shutil模块中的rmtree函数7 I5 u( g6 n$ {; \7 Q- ^
    ( l5 N6 M) e7 j* ]; _/ ^. A
       
    4 ~( I) Q0 B$ ~3 b* j+ A2 q) _5 u
    4 |7 ]5 N) b/ C" ]% O- l3. 文件属性的操作
    - `9 k- Y" v6 W* m0 y& v4 {: K; E
    1 a/ J% t# s& cimport os
    ! j6 c& K  ~! X, U) z9 m7 Q2 v0 J
    import time* R# u% D6 \3 q8 L

    8 w5 C' B2 }( j/ c! }. Z9 W7 e, s1 mfile = 'c:\qtest\editor.pyc'9 J+ F  J& Z& o9 @

    7 h2 S$ O& u3 w# \1 n% S7 `. ]   0 ~0 j4 o$ j& Q; l/ R- t: c* Y
    6 l# s$ m7 c$ Z8 e* J# c
    st = os.stat(file)
    : z; A1 I( |4 v9 H, J  w* |! l
    ! I: e% T- `; G; lprint "state", file/ o6 ]7 J& X2 ^- Y) O

    $ m4 L# i" l2 W4 |0 g+ `   " M- k' d7 y6 x

    9 H$ [" C4 @8 g0 X. |def dump(st):
    $ j4 d" g% ]3 z4 t$ D
    % e# i% C$ @# a2 i' D, Tmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    , O5 G6 Z* _; Y" w9 u- j( j5 P$ K9 ~. k! m! O, V" K6 }0 y
    print "- size:", size, "bytes"
    . c- ~$ X! y& q: @/ `
    7 m' w5 r7 n3 h9 aprint "- owner:", uid, gid
    8 G$ l( U; E8 K4 Y7 X: {1 D
    3 L) W- {4 `: ?# Aprint "- created:", time.ctime(ctime)8 E9 h+ f( \7 ?

    ) z2 v9 r$ D3 `  F! Y& tprint "- last accessed:", time.ctime(atime)0 _. t6 T: S$ ?

    + `# a$ r( k0 [* j0 H  A. |print "- last modified:", time.ctime(mtime)- U" w& I. G( g! V1 b  y
    ( }% f8 I6 W5 Z/ {" R
    print "- mode:", oct(mode)+ r( Q8 ~  p' f' R

    0 u% d, v+ [! L2 Iprint "- inode/dev:", ino, dev6 J( W5 B, W1 _3 t' m7 l
    & ?" _9 t  J* a$ J# r& ^7 w
       3 L4 @2 }4 j. l
    ) ?2 E. S4 I+ k6 d2 Y& O
    print dir(st)6 y+ \" j  e0 N( W2 @# h4 H
    ! ?% `, D6 r% |8 ?* G" ?, \
    print        * K. ?! c4 K3 s; P
    ; l, ]% h, R# o8 X
    dump(st)
    7 F0 M$ O$ E) ?! n: s5 ?3 b2 j6 J4 M
    # print
    * v4 V" d: J1 i& `+ |! X/ F+ v
    ( w3 o8 `" f0 @$ U& V% k. j8 F   & K" K  x. k5 @% X' I/ H, w& n

    # s1 H" x5 ]* g) E0 i: Cfp = open(file)8 {5 B1 t& A1 j+ n' i. o8 B  h0 g3 H0 x

    1 m6 }0 h3 j  O$ q; i3 \5 ~% Fst = os.fstat(fp.fileno())+ V7 y& r# @0 R
    3 g' O' h* j* I  g: g
    print "fstat", file# y3 ^$ E* m" R' V* Q/ I2 @

    # T  ~" B1 [3 d$ d: f9 N9 ydump(st)5 b! C: l  u7 R
    1 e; V5 @' n' K+ f/ q
       2 d$ a# v3 B. b$ o" {( E! \2 d- }
      n* [; K7 K" y0 |
    remark: os.stat(path/file)返回文件的对应属性值st_mode (protection bits), st_ino (inode number), st_dev (device), st_nlink (number of hard links), st_uid (user id of owner), st_gid (group id of owner), st_size (size of file, in bytes), st_atime (time of most recent access), st_mtime (time of most recent content modification), st_ctime (platform dependent; time of most recent metadata change on Unix, or the time of creation on Windows):
    7 Q# V0 [' ^( a6 B0 f7 e
    * Z+ k9 O# y& Q, _$ s$ kos.fstat(path/file)7 _/ |7 a8 z) i: K; K" l

    , X% r- a9 H: ~, {Return status for file descriptor fd, like stat().
    zan
    已有 1 人评分体力 收起 理由
    darker50 + 2 赞一个!

    总评分: 体力 + 2   查看全部评分

    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持1 反对反对0 微信微信
    《舌尖上的中国》所呈现的不只是美食,还有文化。这种被现实挤压而仅存于小时候的记忆,让人回味的同时也唤 ...
    darker50        

    107

    主题

    45

    听众

    1万

    积分

  • TA的每日心情
    开心
    2015-4-9 15:42
  • 签到天数: 47 天

    [LV.5]常住居民I

    自我介绍
    开朗,爱各种娱乐的不老男生就是我了,喜欢数学建模,喜欢那种帮助别人的感觉。

    社区QQ达人 助人为乐奖 新人进步奖

    回复

    使用道具 举报

    102

    主题

    5

    听众

    913

    积分

    升级  78.25%

  • TA的每日心情
    开心
    2013-4-28 12:11
  • 签到天数: 160 天

    [LV.7]常住居民III

    群组数学软件学习

    darker50 发表于 2012-7-10 16:38
    3 Z3 c. Q1 M/ L. N1 V' {3 |, ~可以放进文档当成附件下载的!
    / f- I8 q: x& S
    很好的建议哈
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-4-10 18:37 , Processed in 0.411649 second(s), 63 queries .

    回顶部