QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3793|回复: 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
    $ }0 q4 G8 }6 x0 t8 a  U

    . v. w' |- m2 w0 G- D& N0 q* Cos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    7 Y5 v' O1 F. X8 S, n; Z
    - N$ i% v* r0 H& g   
    $ z% E3 }6 m- e$ l9 m$ _% }" w! I$ w! q. t3 f4 l( A: D6 q
    1.文件操作
    2 }7 ^7 u( T$ h: j. a% d
    ; t$ U' r. g- r; ]+ o% Zbuild-in函数 open 实现文件创建, 打开, 修改文件的操作. P  K  C) g- `& r
    ! ^( @1 e9 c2 S4 X  R5 y1 }

    ' r2 N4 @. u6 ~2 A: l) K
    , q% A: E: e8 c+ X) y  o( Q7 Zimport os" s6 {6 s, ^" I* T" S8 |3 R+ G

    & w& B6 N" P6 x0 Himport string* @* Q: P# W$ S1 S  _

    . P( d; R9 [! N0 ]& D1 n: P% m8 R   
    0 X- V5 F) ~6 v! p
    / E4 c$ |1 T3 ^& qdef replace(file, search_for, replace_with):  T3 b- s) W% N3 H$ J/ u
    0 z  C3 a( R% b
    # replace strings in a text file$ @' r# v/ o. }% ?% ^+ R& K( f; y$ L
    . `: C0 {* k8 X2 A3 W. O
       
    / h( }. q9 D' B% K( o' ~; S) P! D" v- a
    back = os.path.splitext(file)[0] + ".bak"( l" v" }& c! K' B- U# ^

    + K8 o" B! @: T0 F! c; w( f) g; Vtemp = os.path.splitext(file)[0] + ".tmp"4 m0 R+ G! [/ ]: U8 c8 h- J0 R

    0 ?+ R2 ^6 `$ ~8 H6 [   3 C1 F- X8 Z  T$ E( ~' b5 @; |

    # p4 j8 u0 [1 C8 D: D+ ~0 Q' ]try:& j7 E( }1 k: {  l, B& H
    ! l1 o3 `: n& `$ _+ v  U
    # remove old temp file, if any
    3 G- s8 T% W$ o- E% b& I7 P0 `4 V$ |: `6 |* S' ~
    os.remove(temp)
    ; ~" t& }, C( S/ M! S1 k- L
    2 @, R& O' ~3 s- J# Fexcept os.error:
    . \  ~& X1 y1 y7 p
    % F2 E" V9 E5 \0 w# e8 m. Spass3 i) Q; ]8 W9 g9 f1 ^; e
    ( ?9 p1 [: z4 p/ N& D6 b
       
    # w, k! e' a+ }8 g. A! z0 S& V& a% v3 s- g3 A6 T
    fi = open(file) #/ c+ Y/ M% D5 D
    + N. x4 l. d# \
    fo = open(temp, "w")        #! k) p. N; a  y/ \4 F& S$ i

    : _& f  T! ~: g   
    : e; j  z" m3 r, r1 H/ ]) n
    7 }5 h8 D! O6 t( H+ \- K# jfor s in fi.readlines():! A# k0 t3 t. \& Y+ [/ e3 n$ k

    , `# V* q; o  K9 ~fo.write(string.replace(s, search_for, replace_with))/ u0 F' e, z5 s  w6 |* E0 L$ L' Q

    1 ^0 ?) j/ n/ ]- }; Y6 S   
    & _  F+ `& \' R) _; p
    ( I8 h  a3 U2 B" s- R$ |0 M/ f) Dfi.close()
    / j6 j8 P" T2 u# Q! ~' V) t2 J2 N  s8 J" b- ?1 y  r
    fo.close()
    ; I* ^. t6 i- S" K5 T1 e) _  p# V7 b1 ~7 K& |0 r  R
       
    $ M' }9 P  {2 F3 Y: p* o) L. J
    % p: D3 X/ e. O; }try:5 K6 s4 V  A: K. e3 f% t: j& \

    . e: W: N1 p1 a) G2 z# ]# remove old backup file, if any
    * T0 a# `: D9 ~, ]
    7 t3 S  q' ~+ R: N3 Bos.remove(back)
    * U7 ?" \, B5 ]9 ]! L6 _7 I, B% X; o) P3 W+ Y( x- h4 d) V
    except os.error:1 i$ E. y  E* r7 S
    4 A6 y9 L& u5 ~/ Z
    pass7 Y0 w! \/ l' c3 T/ L
    8 C- E. n* B/ q1 ~4 f3 [: Y  J
       ' L. ~+ r+ S& K! j
    % n- m1 t/ U! y0 [/ e
    # rename original to backup...: |  r* l3 o1 d  P# |' Y
    7 G! Z% D: B, H- Y& E
    os.rename(file, back)
    6 D& j- L0 u7 {8 U1 h% q. a
    , I0 b3 E. V& L; w   
    , g3 b- D8 @5 G  K' b- w
    4 H( |0 Z3 `* F' J; E) z( K# ...and temporary to original# l  p& r9 o/ R: O' v5 Z1 D

      y+ p' d( n$ n# Y3 G) s6 Dos.rename(temp, file); G$ l3 S+ g7 v9 |: F3 V) u( x/ b
    1 l' J/ @5 Y( d3 t+ r2 G2 c, D+ y0 r
       7 ]0 P8 |+ l" y$ _; \! m& Q$ @) N/ W

    * z4 j! F% O2 M, s0 m: O# try it out!! }# s4 v0 ?5 N+ h  }  t: U
    ; T4 s# |' ~8 S  Z
       
    7 u: Q8 C6 Z$ t8 y( a
    # S9 _; j& I* Rfile = "c:\samples\sample.txt"+ M, S; t4 n% \5 Z8 Q" A6 u( ~% [7 \
    9 d8 L, C& E$ ~8 S
       3 u3 K7 h/ S0 k- u& V" n( ~- u7 |, ]

    % `! @8 Q( ~) v1 y1 B- r/ b/ \replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena+ z1 `' W( _7 d! ^5 P, B
    ' V9 \4 S2 P8 }/ C* n0 A
    replace(file, "tjena", "hello")
    ' s0 H$ W* E+ j1 |& G% Y
      o2 |2 z: ?7 H# v9 u   
    2 c0 T4 |8 U) F: z; o. Y
    , Q8 _$ u8 E. P1 n7 }2. 目录操作' @9 Q! a" k* u, v

    2 M! u6 [8 D7 b3 J2 I. `os 模块包含了许多对目录操作的函数" u/ o1 @( `$ D1 d
    " j6 H/ ?6 a5 C
    listdir 函数返回给定目录下的所有文件(包括目录), ]5 i, y1 U7 c* ^  ^
    ( r; X' W5 Q, n5 B; q+ J2 ?
       
    + c7 i5 G  R8 A
    , e4 A. V( q. limport os$ F& ?4 M% o) O* X: O/ ]
    6 m9 [. w$ Y6 V
    for file in os.listdir("c:\qtest"):) O8 E* X( m2 i4 R3 D: d

    . q! z6 d3 l$ {& P0 v: Oprint file) X' l# h0 S0 C/ i

    " T4 N" Y/ |0 ]! ~% W   / L) R$ r9 c" g% ^3 K# g

    ( ]3 \" E. T( v$ a9 j. Lgetdir 获取当前目录/ C0 t, O. ?. ]/ V! h
    7 Z+ i5 @: D; i9 l
    chdir 改变当前路径
    ) l" [* p8 t- d2 X* j
    " E  G# X  \  P% T5 C% Q& [   6 ], N$ B8 g! r6 O
    ; W$ L" W" x( I3 V3 ^
    cwd = os.getcwd()1 Q( Y% X4 z. _( ]

    2 w) G4 @3 _- D  R" R5 Y( Mprint "1", cwd; r1 A3 I- [6 }" T$ ^

    $ \! P0 m' M* o: T2 C# go down& M' u' m" }0 s8 Y" O7 g; y

    ' i5 x! L( {1 q' \/ y/ m) los.chdir("c:\qtest")1 H" l  \. e' l8 [* H6 a3 ~1 W

    $ n, X% H  Z. ]2 A" S6 ]print "2", os.getcwd()
    / k2 f6 B8 ?$ b% t3 ^
    ) M: n( N+ f7 T& v$ K# go back up+ k1 V3 ?2 W3 i- L- [) h

    4 C3 H2 j9 a) g1 A8 e# Qos.chdir(os.pardir)#返回当前目录的父目录
    $ k9 l$ T; O/ b$ R. o" E: e) {' ]
    1 y4 X  G- z+ q5 j  P- Wprint "3", os.getcwd()
    . g- y  \, h* @, z2 E6 o0 b; G7 T! p$ N0 q5 i$ O. d3 g5 p4 s
       
    ! R2 }+ _  q6 o  u8 X" X! J) ?( @5 m
    2 M) m7 o% U1 T- u  W9 s7 q, ~: ~makedirs removedirs 生成和删除目录
    ; X0 s2 f* D) j! H2 g7 _1 G: g
    2 E1 u; }% U4 {4 [makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除* U( b. i; x# y: H: C- J
    3 `- R+ {# f7 Q! ?1 a* \* Y2 S( }
       * A; r2 [. y! q1 H) G; {8 F
    : m$ [5 b! ~; N) ?1 Y. d* w2 ?4 R- n
    import os- u$ h( Q7 @8 Q" Q% }4 K
    7 G% w- H; e# \0 }
    os.makedirs("c:\\test\\multiple\\levels")) _) U" E9 y; x' U8 n
    6 A( s6 i1 s" Q8 C
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")1 I/ W9 o$ \+ y1 G

    $ c+ F3 P) f7 L+ Efp.write("inspector praline")1 |/ _8 W3 N6 e4 Q0 r: p" D

    - p" p  `# I. Y. [3 t9 kfp.close()
    " R! n  x& r9 i6 h
    . Z# H7 D: S: n7 i; U# remove the file  M5 m$ e  G, v* x& M, L) F

    2 d3 c( c, n8 R  i3 Z' O3 N3 vos.remove("c:\\test\\multiple\\levels\\file.txt"); D$ V; J8 ^$ O6 K
    ' ?: d( a) D: N: u* @
    # and all empty directories above it# o- F/ b& W, T6 B
    / f5 x9 ]- {' j; z( F* j
    os.removedirs("c:\\test\\multiple\\levels")/ Q2 ]2 U* @" j# x9 \2 ?, t

      y: g/ B0 i3 G   
    2 G; ^) ]) m* u& B0 _% V
    & c8 l# C1 k; f- n9 P& T4 Cmkdir 和 rmdir只能处理单级目录操作.
      n8 I& m, t0 O3 M1 ^1 k/ q
    ) p# }1 l/ M9 e. T% \若要删除非空目录, 可使用 shutil模块中的rmtree函数! m4 ?% l. r/ }
    ( o; C, ^5 |$ ^
       " \# O1 H& R1 E$ X3 n$ s
    # |" G- W: M& a" g1 Q. G
    3. 文件属性的操作' a  l; G. ]2 s1 T9 X7 B9 ?
    ' M0 ^3 n* v" N( L4 m
    import os7 \- f$ e! S2 U$ F( G7 a, f

    ; \" s5 T( a; d5 x$ a9 H5 [import time) p; D1 W1 |  I# m( y4 ]
    6 I# V+ W, R+ }+ m0 T: g
    file = 'c:\qtest\editor.pyc'
    ) ?5 T, m5 x  ~  n2 ?9 \7 k/ }
    - o' ^) C- B1 z9 k3 s$ G# w9 _1 p: D   
    8 z2 }9 s# G  p4 T/ y) n& x! s& f3 D  j/ H  Z/ g$ _8 S7 A; D- Z# h3 l
    st = os.stat(file)
    % K+ s4 ]; h2 i6 `- t4 Q# ^- k9 `% K4 V$ N% J: a2 K4 _
    print "state", file, r# a+ D( k1 E# q

    . {/ B( q5 T% G+ ?  w   5 j7 j9 @. O$ @3 M6 O+ R$ i
    ( E8 c1 I( J4 e$ i* W' e
    def dump(st):
    / p; s" `" N- I+ f3 V0 y, a3 U( m3 B3 Y1 T% @9 K1 G
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st# H! v/ G1 x% A  Y

    2 k& J  P- ^+ I. U: C1 W: Hprint "- size:", size, "bytes"
    6 l7 J5 U3 `$ f) b8 A# z7 E9 g$ A: ?
    print "- owner:", uid, gid
    . J% D6 n1 V, n0 `8 A" A* N7 d& R% [/ r) e
    print "- created:", time.ctime(ctime)# D* b+ J1 b; Z6 }
    6 }' Z( I7 e) d* u6 m4 p
    print "- last accessed:", time.ctime(atime)! L3 O% U; P* o0 `/ J9 p# K
    + \1 C- k" j- o- Y; ]
    print "- last modified:", time.ctime(mtime)& y, ]( r# h, x" ]5 g

    ( ^0 q8 F8 [. k; |9 y  Kprint "- mode:", oct(mode)3 n; S. h* G+ {" }% ?8 E

    - S! X7 e* q8 r) ?' pprint "- inode/dev:", ino, dev  `2 K* ~9 B# @( p1 l+ _7 z% q

    . J, l# g8 h$ N. l3 ~4 }   . B0 Y& e- ^) `8 z
    7 a+ e* m% r( E; @+ k4 R
    print dir(st)5 ^/ `& W# `" ~8 O/ {
    2 z3 n2 t, ~9 _9 e& o  V
    print        
    : X( [  o) N5 E% ]7 }$ m, \$ q. q4 I/ `; x
    dump(st)
    3 z( W2 L* K1 C
    + v9 }% w6 o# S# s$ V5 h# print+ B* j$ k* x& L+ @, L# p
    8 l2 W  O! n. J
       
    6 ]/ y" w2 U5 v& o. K8 \
    ; C, Y( y7 Q+ [! ofp = open(file). j) X* m& k1 H7 {) ~4 c

    6 A- F( G" h8 u8 x2 q1 cst = os.fstat(fp.fileno())  }1 t( m1 Q1 r5 q+ ~

    / v( S0 b6 @; V; }print "fstat", file7 F  q, D8 I9 `' v
    0 J  w/ c0 ]1 z( G# P1 K6 v. `
    dump(st)2 V$ _# d8 B+ I* C% c

    8 u" t+ A7 j9 D9 z' J7 ]& }7 m   " y. {6 ?  b' r+ }8 `

    ! i2 i' x9 ?3 a! m! t$ k) Mremark: 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):
    8 `2 v# o: L  t# c/ c. D$ N+ w
    ! G. C9 Y9 h7 w, Pos.fstat(path/file); d4 }! \  ]$ v  |) p) s3 O- z

    2 g. ]2 j9 B4 u4 J1 z1 CReturn 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
    7 b% u* z: k' E; I* J2 a7 {1 p可以放进文档当成附件下载的!

    % T% R  }+ x+ e很好的建议哈
    回复

    使用道具 举报

    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-4-10 18:15 , Processed in 0.300501 second(s), 64 queries .

    回顶部