QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3879|回复: 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
    , l6 F6 Y/ _% c0 H% {

    7 |$ g! U1 R$ ]* ~os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作4 h& B! b" ?' C
    4 S6 `( j0 c& p5 Z( ~6 ]
       
      H4 Z& M) K8 ~) l, x! ~; M" c1 O* G2 }% G+ m! [: J2 o! Z3 f
    1.文件操作  d& X$ A$ m, h# {8 [7 r$ _/ _( j
    : s1 u$ P: [, I4 }1 |2 w
    build-in函数 open 实现文件创建, 打开, 修改文件的操作  l, z- F7 e% |7 i: M) D: g
    ) k2 s1 h3 _7 G! M, b
    6 k! S4 d7 V8 {% `+ x2 r

    . C) Y- }8 E6 j! v) Cimport os
      }6 x: H+ F: a% q
      X# t! L% W# f7 G; himport string
    ; t& d* H7 N& I( E  P" D/ V" s: U3 _+ T1 u! ]
       0 B5 |, |7 S* A" P6 F' D, z

    0 }, f( \" E9 T# o/ vdef replace(file, search_for, replace_with):! J) A8 b$ j4 V4 {# W* `4 ^

    4 {0 l3 ?# p% y$ w! Y# replace strings in a text file9 }5 O8 S+ ?: y9 o, M

    " k% P' g4 c: d7 K: e3 s   : P, h( ?9 R# @  l) h
    4 ]" p7 r! ?  N" y8 A/ K  h
    back = os.path.splitext(file)[0] + ".bak"! l+ h. e) p3 u9 B9 B8 T

    0 t/ Q5 E0 Q& e, L3 J6 Htemp = os.path.splitext(file)[0] + ".tmp"8 e9 l. r7 Y/ ]" }6 f  H2 l

    9 A( Y* {2 G1 Q+ A' |  W   & B( Z$ ?. k* t+ m2 T& v
    7 p$ Y& B& J& i3 O. v/ ^
    try:
    ( ?" `) ?& d0 x1 t; z4 I" h6 d" k* L* D' G- k. J
    # remove old temp file, if any
    & a) r+ O5 e! Y7 j7 a. T7 o7 p5 t( f  Z! J
    os.remove(temp), j, O5 k, _$ |" o: g" G" \% b7 S1 s; r

    , I1 w1 q) n; P2 bexcept os.error:2 F0 O% F. q8 f, Q; {* G  B  C, U

    $ M4 S2 o. g$ s9 Y' ]0 Opass* g' r3 A7 v" H; M
    , S) `; k# c1 O( M$ N3 `
       
    # O4 Q; C+ f, u, j; `, }
    * L* W/ `! P6 y( b+ tfi = open(file) #
    ' V  h- l7 y3 ~) L( X: S) F1 m
    ! `2 M# v2 c9 y$ q2 d* kfo = open(temp, "w")        #
    : j# ?/ t% Y% v* w
    : W% x; m" M  b* `4 e) y   , R% n1 U: |, S, ~" U+ q7 X5 m

    6 S5 ]. U4 f7 Z# \+ Y1 x0 Tfor s in fi.readlines():0 S9 u1 r. Q; a0 f- q+ ?" m( T+ P

    , K6 B  Q' m3 Efo.write(string.replace(s, search_for, replace_with))
    0 @0 ]- L! ]" _! c6 K6 D. K
    8 Q) {0 ?' `1 j9 {. E) h/ I0 r7 n2 ]% S3 U   
    0 o5 K4 f6 G% o! E5 k& y7 X/ E( P- \& o7 s3 O! Z7 O  G# N" J
    fi.close()
    ! R. {! z2 W% x, l" i- Q9 ^# h# z9 T$ K6 Q0 Y6 @5 J* B
    fo.close()* S& N. x1 B1 ?# u0 R
    & i1 `4 H5 W- y, r: p
       " G7 B; l" i5 ~) g8 x& C! r

    5 u! S9 N+ ]! q, E# \try:
    8 v% O: z8 l4 B& }6 K; p3 Q
    5 ]) }& i3 W- Z# \/ C# remove old backup file, if any
    . \) d# W6 i) c# E( v
    # L6 b' b; ]$ Xos.remove(back)0 ]$ h& l) T' f0 C

    % K2 S- a! }1 Lexcept os.error:
    , Q1 ?3 V, ?2 N0 A# z' |# t& S3 [, Z; _& X) q3 N0 X
    pass
    ; \) @9 t, c8 R, j+ O1 L
    3 I- H; f2 p+ e' E- I- V   * S3 m0 b5 k/ F: a. O- {+ S- O
    7 a+ @% G% G, V) Q/ u
    # rename original to backup...
    6 Y$ y7 T1 _9 ?* X( `/ A
    : a: I- W" f7 z0 t5 Dos.rename(file, back)' M& m( h; I0 g; S
    $ g5 a8 Q/ i4 A. G! I$ _) F
       
    9 \) ^* g# @/ Z
    , M4 l& l, Y  ?% N5 `9 o# ...and temporary to original( R8 P) p' k# P2 t/ q% k7 n& n- m4 n

    * R- Q# }% ^( u' Uos.rename(temp, file)
    . Z% U. W- o& v/ u# s- d, }/ p) S) P0 ?% d% }6 s6 E
       9 r+ H6 g) M% g3 e1 x

    ( T7 g, l$ O+ K' z$ Z; [/ E# try it out!6 K0 e" D  l3 Y, U$ Z, {, F

    ; o* l, c$ a/ I   
    : `; B; |0 P" v+ \$ \
    " N( N! Z/ ?2 ^/ vfile = "c:\samples\sample.txt"- I  q2 w) ?. ^* T+ q& O
    " v$ D& U4 G' R. C+ Y, k5 O
       5 p5 u$ ?% a7 ]: A
    ! R; W3 E3 p- ?" Q& H% |: C
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    7 B- W, b+ ~) V5 }$ d  Y  q" X4 V- l
    replace(file, "tjena", "hello")& w- [* C. i8 B! l

    6 |# `3 I6 u: B# E+ R   
    , c7 z9 ~/ W' c6 Y7 y: g/ v3 n3 [+ D
    2. 目录操作
    8 v! _8 [. D+ }( n: m/ V0 M& n' J/ @  u$ \* K
    os 模块包含了许多对目录操作的函数
    ( F6 t# Y/ g0 u- ^! n
    ! h/ \( q! t( |/ x9 a: Y5 s. Jlistdir 函数返回给定目录下的所有文件(包括目录)8 {- J' c% |- L. ?, H5 e4 F( N1 Z

    8 _# D+ K: I% r  ~   3 E) q; p6 I/ ^' u% }% L

    # ]/ A* e( `" U6 P2 l) Z7 Y- Aimport os
    6 }7 f( c- g6 L* ~. Q, A* v1 T+ ?$ d
    for file in os.listdir("c:\qtest"):% r: f2 E# c. c/ M

    1 G5 k2 }* s& B: K* O# Dprint file
    ) [$ B, N# I+ t1 }+ [# h
    ; h9 e, K# s3 C" p   & g" a8 t2 N  X$ n+ \- W
    , X6 w" D' L. D6 R4 R& X: w
    getdir 获取当前目录, D! N2 O8 v' o- J% w

    2 z! G$ Q; o; T( G3 W( X% c2 S# T3 Mchdir 改变当前路径
    $ E% Y8 P8 K  `! r7 W1 _6 M/ y6 m  m/ o, O: t: ]2 K
       
    & O- |& U5 h. a& j
    . F6 L! K8 g5 ~* R# M  b2 dcwd = os.getcwd()
    1 F# a5 ^) H' Z( h
    . }" }' _  Z7 A, M$ Tprint "1", cwd+ w% U+ W$ S) C8 n, d
    - `6 Z4 P$ v, b4 A2 r/ V
    # go down
    & o  ^1 u0 v7 J8 n# W3 [. |% d5 g; k/ T- a4 R
    os.chdir("c:\qtest")$ F3 W. p2 ^3 c. R  A: ?' l$ k
      m$ E+ q  E8 p: Z; ]1 D9 Y
    print "2", os.getcwd()
    + N6 u1 z( ~2 g: }  d0 H! n5 d2 h5 z
    # go back up
    " S1 S1 }1 `5 j5 w8 E% E
    & ?4 ]$ |3 T) i+ b# W# T( V2 zos.chdir(os.pardir)#返回当前目录的父目录
    # r, P4 W0 R7 ^: l% K+ f
      I/ [% U" S5 A8 [( wprint "3", os.getcwd()$ Q7 a+ r, g: i6 O2 ~5 K

    6 Q8 C+ e1 u% m4 O   $ V+ [. |5 V1 ?" `9 G" ]

    . {1 w5 ]4 S3 z' Lmakedirs removedirs 生成和删除目录% u+ W4 H1 z6 h! e
    + e8 U) R& c/ G4 {% I0 z( j
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    % V$ q( k( d: g! J3 f2 E7 Z1 |; Z6 F8 `$ K! T
       + q8 r" w$ ]) e/ K* U9 Z6 W
    - P3 k! V+ l8 I& `
    import os
      a/ |' _9 m2 a8 h: }6 A
    - f: t; y% R0 K% ~+ K+ `6 Yos.makedirs("c:\\test\\multiple\\levels")3 O6 t" p% z( E( i% F
    4 V" i( ~% H$ l/ {; q) L: Y
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    0 W3 D: v. ]- W$ m2 l; A: h0 U2 n# w" B" ^( z
    fp.write("inspector praline")
    ) h7 ^! U8 C( y- S6 w( y+ a( `/ W3 b
    3 ?7 y3 a9 l- x2 P+ k% zfp.close()/ s) k/ Z' v9 [

    7 n, L+ x2 ^1 r# remove the file
    4 e) J0 Y4 R$ S) W  V3 D* q7 F" I. @& Y4 A8 o
    os.remove("c:\\test\\multiple\\levels\\file.txt")  f( a( t, G% V4 K# m

    7 n( {" Q" ~, x' @) R# and all empty directories above it5 _( d7 W  @4 ]

    $ `! D) F0 @/ n2 p: t) Kos.removedirs("c:\\test\\multiple\\levels")7 u4 u0 `  g0 P! m8 V9 L+ l
    9 a9 ~, d* A  }, V* k) `
       
    4 f' V. Z- }" Q' `2 Z) ]) w% ]" k/ F: \* ~) A  ^; d2 R; e5 }( F4 S- c# V& m
    mkdir 和 rmdir只能处理单级目录操作.0 m6 Y& C2 Y# Z
    & u3 |( r6 r  {* X, `+ M8 R
    若要删除非空目录, 可使用 shutil模块中的rmtree函数& u) \0 d$ Z. O- H" d

    / S! l& M/ ]& }   
    * y5 @  ?* c( u2 @* |; m1 P- I- C$ c4 `) f* n% [7 G' |
    3. 文件属性的操作
    ! [- l# H( M9 f9 E: o7 g* p
    3 x- a" {; U- W" l" d$ C2 a- }7 Himport os- }; S# ?5 y4 d' V7 N6 \

    : E9 d# T1 }" r' ~8 H2 S( S5 Himport time6 O% B- i5 r, U- ~4 |0 l
    9 }+ S1 ?( Z5 ^2 i& e. ^
    file = 'c:\qtest\editor.pyc'  q) ~7 n) O; H% k* _
    1 _7 b$ ?3 B8 g0 f  @0 V
       ; ~$ M% }; d" B0 N
    + F4 Z0 L7 p, ]- e" R' H/ Q+ Z- z
    st = os.stat(file)
    & I, H, N1 q" Z# h& G0 v  J4 n+ r+ \1 R2 ]! v, l
    print "state", file
    : b6 x& C3 G4 L0 l& s9 F7 A; G: o1 ?6 W9 N6 {) Z) I  U
       7 |( N% B3 `( F( |
    4 b) L( C' [" w+ j3 B9 v
    def dump(st):3 @9 z" I* ~0 E+ Q) E
    / Q( d$ v  y2 T
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st$ O7 z/ g7 y4 ]& d/ d3 f
    5 e4 h5 m8 H' C6 R0 h& h1 x  I6 a. d3 ?
    print "- size:", size, "bytes"& M, a) Y! e; W) Z4 E4 h4 A' S

    8 _& _" f! e& c7 @( m" tprint "- owner:", uid, gid* ^! Q0 e! F. G& L* i6 h3 |0 C9 Y

    2 t( x9 f+ |" Z3 h. i1 N% P- Pprint "- created:", time.ctime(ctime)
    * @# E* C. ~  z: A' u$ \
    ! w( S& N! j! x8 Y6 Xprint "- last accessed:", time.ctime(atime)6 M5 s! q, A" S+ Y- e6 s. G0 p9 l
    1 `# A4 P9 O, `% q% Q+ K
    print "- last modified:", time.ctime(mtime)
    & ?: W" r  ?6 ~: @* v; @9 P. O; q
    print "- mode:", oct(mode)
    3 p2 [- ]: J% W6 Z& n) G
    ( m9 g4 f6 T" Q: G+ x- `# Iprint "- inode/dev:", ino, dev8 F% E# n3 g. f

    % U0 @* O2 J( a9 U1 K4 g   
    * E! S8 K; s6 C7 S, J0 \
    - \( E5 c1 n! ~4 M% e/ ?print dir(st)
    ; U/ k3 J* c3 B: W. p, I8 B* R3 k7 C% [+ {; k- t2 m( P: A
    print        ( [+ i9 H+ ]+ E

    1 c$ Z2 {% z  sdump(st), e" I3 D0 Y9 r+ u& ]+ Z' b

    + E/ Q8 \6 }( w3 I6 c: _1 a2 R# print8 t; n6 f: B4 }; G: n7 S0 N% B" }

    7 U- z$ S* m9 \/ Z   
    , f0 c4 Y9 Z! D9 e3 A" m! y
    : M) M- N1 G" zfp = open(file)
    ; z" q+ w, }; p' w# K# d- ]% K" u3 _
    ! @" S! y, a; Z% qst = os.fstat(fp.fileno())
    # a: ]/ Y  l5 i* {7 g6 |$ G- t4 a, P* n* h, J/ a
    print "fstat", file
      B! ?- z3 `( ^" a; \% J( G
    8 l& v7 V( v6 V0 P6 X& M0 {6 W8 tdump(st)
    4 ^4 ^# d8 s. J. s, h) {6 X
    % k% b6 H: O" t# L! N  w% w" }   * D  |& ]2 X- s$ S7 p1 D
    8 O8 v. r. c3 c- t
    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):& f/ g4 l' b+ b2 Q  h* k
    ) }. c( A. k, B( ~* K
    os.fstat(path/file)+ E9 E, X+ y# P; U
    6 b! r( @1 a" F  J/ Z
    Return status for file descriptor fd, like stat().
    zan
    已有 1 人评分体力 收起 理由
    darker50 + 2 赞一个!

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

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

    102

    主题

    5

    听众

    913

    积分

    升级  78.25%

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

    [LV.7]常住居民III

    群组数学软件学习

    darker50 发表于 2012-7-10 16:38
      Y1 c- h: _1 V" @. f7 a可以放进文档当成附件下载的!

    4 n1 Q2 P) @+ w3 [3 p很好的建议哈
    回复

    使用道具 举报

    darker50        

    107

    主题

    45

    听众

    1万

    积分

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

    [LV.5]常住居民I

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

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

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-5 02:35 , Processed in 0.401160 second(s), 64 queries .

    回顶部