QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3889|回复: 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

      P- ^6 Y$ U2 N" D
    5 m- b" Z5 z& _: n9 _7 }% S( ?os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作' y5 r: @4 x' K& o# h
    ' E0 Y' f; B; H  u4 d3 o% w) C
       3 d- F" e, v* S! N

    / `% p8 r5 r) ]' }) C+ i1.文件操作8 [* L2 o8 Y. R
    0 B2 C3 O! r3 Z4 @& y8 p( g
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    ) H: a, l% T" M% B
    ) v% ~" Y4 S. o. J3 ?: ~ ! V5 B  A+ _# J, p7 N' {9 d

    - Y! q8 q3 [6 k4 l% i' Wimport os
    1 j! P+ F$ J; m3 o& s5 h
    * f* w& d/ ^1 T" j4 k. ?) Ximport string2 M# t- _% G4 z: ?7 o

    # g- J" V- i1 u$ y$ i; s, s   + _4 S; R9 o. x
    & _1 s& z! }& D+ g5 l! H, Z
    def replace(file, search_for, replace_with):6 [: U7 k3 u. W
    ; s9 W7 ]& h- a7 N4 V) t. z) p
    # replace strings in a text file
    : z  Q" ^( q! y/ l) H5 |: a) a$ Q7 w
    ( s  H5 E, }* y   
    , I  j9 z) N! _$ o
    # u1 S. @  Z; C: Bback = os.path.splitext(file)[0] + ".bak"5 X, ~+ ~; X+ T# ?$ D0 D
    1 ^& \" q; T% J' t- E  }( K
    temp = os.path.splitext(file)[0] + ".tmp") U4 O4 ], [. U( F' {8 x7 @
    ; v! C, E0 r( z+ T0 H- u6 e
       8 C* r8 y6 v4 _! o! X! \0 ^

    , u& t  _' c: T8 i1 s, Rtry:( `% }8 R$ q5 J. p
    , t1 |8 H" e* C) W' l: u, p
    # remove old temp file, if any
    . a; l. D3 @: T& d! k
    * W2 N! v9 \  }  j: p3 @1 M! Gos.remove(temp)
    0 W- d$ {) k: Q  a- E# e' ]9 S% I' P8 O5 u' j, z* m% ]
    except os.error:# K) \" v8 B, ~+ ]6 w. G# w
    3 s! c/ H5 T6 a+ B: g
    pass
    7 Q' o7 I+ A2 U; V' J
    0 Z' g+ _% @- E  ]# g  w   
    1 F/ a) f4 w4 K( w' a, I/ s. b
    0 v  x6 Q% t% Ufi = open(file) #
    ( K: e5 K8 h# t9 p7 Y& `: C/ @- i
    9 y/ B, y9 [) o/ {# ]fo = open(temp, "w")        #! @% w& E+ E7 b  k" H

    : l6 r; G! v7 S1 F9 |   " M# p: d1 s8 \8 a2 h5 K9 {: _, J

    , C- K6 T( G% U0 ?: @for s in fi.readlines():! H, s# H# _4 q# }8 j2 C2 ~# r
    ) @3 D" ?. u' u# r4 A# t
    fo.write(string.replace(s, search_for, replace_with)). E! U, l2 @  D* @

    * B6 ]; `3 Y6 q' z6 t- l   
    ! o% i  b7 T; [# d! n! H- t- e/ P+ F
    fi.close()7 `5 [9 [; }7 T0 b' I
    ! F- V4 o4 p* E- M: P/ Y8 ]
    fo.close()
    * j1 x% d# X+ T6 E& T8 Q8 @/ X* ~$ b) I
       ; e# |5 c7 E9 p3 d8 c, X
    5 E* p( k& I2 L$ F2 C# H" A" c0 _
    try:9 V; j8 p' w5 D& U, u* _
    7 K, D$ V6 x5 {2 A! h7 d9 M
    # remove old backup file, if any
      N1 T$ p8 U7 `3 q. J0 F/ L% \/ {; z) C
    7 v0 x* ?4 N$ C* Los.remove(back)2 R# g# O$ r: `
    / A0 M; B6 s2 }4 W% e; F- c: V
    except os.error:
    # w0 X4 h/ w. b' k+ [, H% t' D. C$ _2 J( \# y& V( C
    pass  t. J9 |- P: o* n
    - b) C( h, D3 z. p" `* _8 u# \/ [
       
    5 Z7 W$ W2 n' h3 v  I" g/ m4 m- W- ]3 T% S
    # rename original to backup...
    9 Q! g4 w! b% _8 {" c" q2 _
    % w' n$ Z/ D1 M2 f; N+ `# w- ?os.rename(file, back)
    & {% C- _5 |: D, a& x5 k! z/ t4 a* g4 o% U
       
    - G8 K6 S1 S, u: Y$ f8 r( @: A8 }
    + s' i1 ^! S9 l  i% G- a) v, T# ...and temporary to original9 w* N, J4 `9 n8 a" P1 |; y
    5 i' c* H, e$ D: m: I0 @$ b+ U5 V
    os.rename(temp, file)  d4 [# U: |* p* s0 Q

    6 t  c) s6 P. Y2 L, @, o   4 w& g2 A5 r2 E

    . j' ], R' E5 v/ A# try it out!5 q' C' x, A' k. ~

    : e, Y, s6 X9 W* v5 j( C   
    9 e& m1 O. T, c8 y/ I
      m3 T3 j9 t6 e7 p7 {file = "c:\samples\sample.txt"
    " }. V+ z/ B2 B5 `, e6 c; I, y) Q( y2 Q+ p2 Q' q
       
    3 C8 O) Q9 [: [/ V9 y  G: w5 L; A- Q' `' l
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    # e! z  _: H  s( u. y  n. R, w" H: r* J( N5 f0 X7 S* E% a% l
    replace(file, "tjena", "hello")
    # S: j7 d2 ^. U% \) x  o4 H# F3 ~7 i+ R
       3 ?9 k3 R8 \2 s; |: E3 b
    4 v7 A& r% ~3 z/ L7 T
    2. 目录操作( l# E5 h$ w% v) i& \

    : |% s( E+ z; i, _1 m% T0 P, W) xos 模块包含了许多对目录操作的函数
    : I+ s3 e) Y2 y& m' @& u' J1 [" |3 e7 X
    listdir 函数返回给定目录下的所有文件(包括目录)- U* o0 W" G7 S+ s  v' [

    4 a' I  f" q: }7 n7 i( r8 u  T& d   , n( Y  m- z/ Y0 T, [$ [

    . c) M  w) ]/ M# D  r0 l+ zimport os/ R) O! [! m$ L# ]) n+ o
    7 d$ G6 z* u8 H$ ~  a
    for file in os.listdir("c:\qtest"):8 D2 `2 F1 J1 }; y, W- C
      G2 |$ m0 y: A* J
    print file
    2 H/ b  X6 O" b1 [/ x* `! ]: ]+ y* Y  i2 M" Q0 ]) K- Q
       * ^4 l, C' o$ ?! k) X% l8 i

    2 ^( U+ k: E* ?5 ~$ ygetdir 获取当前目录
    6 w; u9 v4 Q; _0 Z- M$ g# @
    ( J1 h+ b3 @: H( ^- |2 Kchdir 改变当前路径3 J/ ^: @% y6 A2 ~2 h3 {

    - ~7 F5 Y% y6 t  V   6 [& T& ^; j, Q

    8 m2 m5 N/ i9 m0 z8 Q) {4 icwd = os.getcwd()  f4 O) _( s" y# S/ a
    ; |- y( f. A8 v7 s: j- y
    print "1", cwd
    8 v3 O2 M! K0 D% U- c) X* u/ p' \. C1 f# x; R# k+ O
    # go down
    9 V6 p" f  j' a1 O' d$ m( N! h0 Q0 h  o$ B5 B2 o# U2 c+ N
    os.chdir("c:\qtest")
    + U1 J6 N- f* y8 F; }% Y
      _- S; q; _; G4 p8 P- \print "2", os.getcwd()
    8 a: l1 {2 @8 {. b/ }' B2 @# x3 y: W
    # go back up
    - y7 Y* [9 B. s7 c  A; E
    ' [$ T9 j) Y1 d2 r2 k/ W& t/ q' @2 `os.chdir(os.pardir)#返回当前目录的父目录
    # E% A' z/ j0 S& u. i2 x6 P$ I& B+ K! d4 K2 J" x6 r; [
    print "3", os.getcwd()
    7 [+ \, c* e& X& D) m, \' s" M& X1 L" |" I+ l7 ^' F# ^
       : m# e" b  h8 m, W' G& F5 I

    : J+ l- }3 p. U8 K+ s% L" omakedirs removedirs 生成和删除目录9 e# x- l% P1 ^  t' L

    : |- Y) o! i! i4 m- N0 Amakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除+ ^. c2 m$ c* c6 B8 y) c8 t

    % Z' g3 W- }) K& S, [  r   
    6 L! W/ p! c% a
    1 r% Z" g+ S4 h3 mimport os3 [, N( E  D) w2 K

    5 Q6 n: K* S! w1 X' i" e% |+ J3 kos.makedirs("c:\\test\\multiple\\levels")
    : @4 b5 r6 C: M) z
    7 [- v, p- l  k, ufp = open("c:\\test\\multiple\\levels\\file.txt", "w")- R1 r# i6 L, p( o" o0 H& N) r' h2 j

    + X8 U2 {" [+ Q1 qfp.write("inspector praline")
    8 ^* V& n1 l. S
    - T; A2 a4 [' Afp.close()1 U1 |. @9 i2 |4 n( W9 W; {% P1 W+ ~
    2 ]8 {% s0 a  V9 b! Y+ M" M0 O% ~
    # remove the file
    " [0 ?4 {" N7 d) p  A' b2 x9 ^" m6 m* `0 N" f; x
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    ! X" D: F2 ~' R5 B5 g  m, }& r: i; u( C4 R2 T8 G
    # and all empty directories above it
    * a& Y$ Q  g2 `( g3 E# f6 W
    / H5 l; L& E, P, {: O7 X- zos.removedirs("c:\\test\\multiple\\levels")3 u4 r! a, _# h- Q# r8 l

    ' s/ D7 g' J8 N# }1 |% W# Z  H   * w! G) ^) `' t$ i$ o; I/ t8 a
    7 V4 f( \/ ^  ^8 z% s- p5 ]/ h
    mkdir 和 rmdir只能处理单级目录操作.
    ! X" z1 Q7 c# t+ a4 Z* R. F4 z
    : M9 T- J$ O* S5 a若要删除非空目录, 可使用 shutil模块中的rmtree函数
      ~9 @% \: _+ f) i; {7 R/ L& T7 _- T# i' L! S
       
    $ p  P( d: y1 U2 ^- o& S, ^: I5 ]" `( W8 {/ m  v9 c% v
    3. 文件属性的操作
    & m- Y/ Z( ]" r# T: c
    $ `+ f$ m. ^& o8 n* b% Iimport os  @' ?) J! o5 z% N- Z) \
    : H; q8 I/ `2 v8 B( R" M! i* L2 w
    import time5 k) D% n! Z$ P
    ! J7 q; J/ p( ]$ U
    file = 'c:\qtest\editor.pyc'
    4 r2 B& ~6 U2 R- s. Q1 x. p$ e
    8 g7 E* v' n* Q4 A1 p! s2 p2 T     ^" l: y& F; }' ?  E
    9 D, ?) t. }$ r1 h
    st = os.stat(file)
    + C8 }% F( ~( n$ ^0 s4 i" \: C; D9 e  a( ?; g. O! t
    print "state", file
    4 m8 x+ m0 G* J9 Z3 m1 a! i: a6 e9 }
       
    ' [, O+ ^; {+ @, C
    " C8 g8 r  g1 a6 F- b3 Vdef dump(st):1 P5 p4 O8 u) t# Q9 s, A/ E

    , `+ \, t$ r) Y  wmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    3 }9 d( Z& Q" f1 O  s7 i" p
    / r! q+ M: @$ c/ _( A) Oprint "- size:", size, "bytes"! e  ?; V/ A$ T: k5 q9 k

    ! l: D) W. U. E& `5 q5 rprint "- owner:", uid, gid! X3 i! u. \8 P3 f
    : l3 T& E% z  ?7 y
    print "- created:", time.ctime(ctime)! m  Q3 O% f9 K* X, ?& ]3 V7 }" D0 F
    ' y$ a, R0 {1 ?1 t, K# W: [
    print "- last accessed:", time.ctime(atime)
    2 Z' I4 T6 S' v1 G% J2 u( ~6 g# K: t; _+ i' F3 e- k
    print "- last modified:", time.ctime(mtime)
    % N# K  N3 b$ w" u" X+ ]
    ! U, ?: x; h  z% t' Oprint "- mode:", oct(mode)
    - l( ?( @* t5 u( v! c2 x, R" m# f( p7 R- }% v1 ~
    print "- inode/dev:", ino, dev% Z7 V. b* h/ |; ^  N2 O

    ) u7 _# {% t, m5 v. t, i5 e   
    $ u% w+ {1 m( j& f; ?$ S, P/ v  v  |( }6 W" @, ]# ?
    print dir(st)0 }% l3 Z; {4 m/ E$ {- u9 k

    " |) F2 d5 C# G, l5 Q  Wprint        8 _  Z1 B8 Y9 ~6 S4 [  z* q

    1 m* W/ H1 V  ]dump(st)
    . `. O* ^1 f: U# A2 i' K( Q7 Y2 {: Q6 m3 X: ?( U# d9 k& Q
    # print
    7 l/ l( t5 y3 b4 I6 a8 b3 d+ B* p, z; T
       
    : A/ h5 o/ p3 Z( ]  F
    . h& ^; `. `$ K6 {fp = open(file)8 o, h4 n4 B; m& c5 |' z
    : \; A1 \; J2 c/ b# o
    st = os.fstat(fp.fileno())
    - G& X6 i' W! P
    1 l9 b0 }8 ?! n" n+ N6 Pprint "fstat", file0 t& J. U% `& u: F  m6 R
    0 Q- `  k9 [) w* n* m4 V$ E5 q
    dump(st)2 y  S5 R/ ]* X6 z5 ]2 r9 w
    3 C6 m( y. F' U/ \3 u" t
       9 L6 T4 D8 ?" K
    % B. ]8 _/ \7 }2 _# J
    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):
    ! B* v4 l3 v# z/ k  |" w, _4 O; A( `8 Z: y5 U( k% y
    os.fstat(path/file)
    3 c. F6 U3 d1 _4 C8 k  |! C, E  J* W# L9 i
    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
    # A. Z( Q, D4 M可以放进文档当成附件下载的!

    & k: t' v/ A# q/ y! P很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-23 06:01 , Processed in 0.451495 second(s), 63 queries .

    回顶部