QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3791|回复: 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
    : G  H* `/ \% U9 r  a

    8 D& d7 U, U# U  Xos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    ) U, x2 B4 q: Y" Q, C4 \
      e- N5 ?3 @# L6 x( ~1 h   
    " [; k% @1 n6 ?
    ' W( X( l$ t) `2 T& O1.文件操作
    : @9 c9 p1 m  _4 U$ ?- Z5 E/ g$ A& r# j& p+ ^
    build-in函数 open 实现文件创建, 打开, 修改文件的操作' y1 V2 E- s* |7 U8 {; q
    ' I, B: O: {! y! n# u# t$ b5 k
    / {, C' W# {" b) w: ]5 _
    ) g( N& O: A3 @0 E: g3 R" t% y2 |
    import os5 G8 D3 u" q. u2 R' s8 B( v
    ) _. p# y& M6 s, `
    import string
    , R( q( ^) F% j7 r$ F' o! d7 i; S' O
    ( ]. d* B# a4 B- w- ^/ y   ! [* B1 K! l4 _
    8 F6 h3 x1 _) ?% C8 B2 f
    def replace(file, search_for, replace_with):' ]5 W% ?8 B1 Q- T

    2 Q8 U; u# P- W2 n* }% }1 p# replace strings in a text file
    ' a) w( @" B; V# ?- _6 H& I* k& z6 Q# M7 Z
       
    / s, W+ @8 {0 \, t2 ]+ o& J5 `& g& x, b/ y
    back = os.path.splitext(file)[0] + ".bak"4 \+ z7 W9 Q( C+ Z7 K+ _- i

      w% h7 t5 J7 Q/ F. S- }2 f' otemp = os.path.splitext(file)[0] + ".tmp"1 I" ]" I) t3 `, h$ j3 q# E6 c

    ( P1 p# c( m7 K& P/ d5 a) c   6 |/ F2 U- t4 }/ R2 @1 G/ J7 u4 T+ ]
    ! U1 Z1 d' K+ |! H3 l6 X& D( }
    try:( U! \2 Z. O( h5 `4 D3 L/ T( A

    ( u: ~  y- d# s9 r7 N# remove old temp file, if any
    6 C  F2 e/ R" ~' v0 q/ H9 J, M
    3 C0 P) |2 A$ }( O. zos.remove(temp)
    + w: i6 O  I  J$ E+ P% J6 _) Z/ \# x+ h; ?( B1 x7 }
    except os.error:
    9 X- _) C1 W  u% @
    $ t6 R! f# `# @& {pass- ?2 o7 G. F& J2 q

    + O/ K7 Q- b6 U" M$ w; \   
    * o' l. p1 |. i& P1 Q: S. f4 n+ W: d3 Y% K0 P
    fi = open(file) #
    9 U3 G  {/ v0 E) g; M! E0 Y% X* T/ G& |( K) j, T
    fo = open(temp, "w")        #
    3 r% e( |4 k) N& _( [* d9 T5 X' _1 Z$ S7 o# M9 S
       
    + E' D& U* N! A6 I
    ' `# u: c2 k+ ]& M. g/ l8 r+ I- Lfor s in fi.readlines():
    2 Q/ Q- j) r5 b* g5 d1 E% ~5 ^; _
    , |& g8 v0 n- y! Pfo.write(string.replace(s, search_for, replace_with))4 |. W- F3 a$ @* O3 E
    # ^- I) v' L7 D, |
       
      n& h, i+ A# p, ^: ]0 T: e, [8 ]# o! p) y$ }
    fi.close()* T6 ]% d2 f& s$ {2 _

    ! A9 X6 p; {2 z) j7 Bfo.close()% c% E' O; p8 o2 Q

    % d% m( M6 q. }; T0 }, }   
    " t% E! c9 W& ~0 ]  Y$ T7 {6 B$ _1 r
    try:
    & Z3 Y, s" }( y3 f
    4 _3 T; C. F) R, r0 ^# remove old backup file, if any
    8 E) X: N' r7 H1 n6 T
    3 r6 Q4 J* Y( A8 T+ o0 Qos.remove(back)
    + y# \9 b! z1 ], ]
    * S7 c" S$ R# H6 [except os.error:8 B1 ]+ r- Z- E$ A" F; \( v
    . Y/ H) c- h2 [) v
    pass  G# ~* |3 M' A  z5 z

    1 Q( p: h( U7 U6 S4 Y3 t/ v   
    % j, g. L! k2 H9 q% o, q/ A1 Y+ Y& W8 T! j$ k% O. S+ {" ?
    # rename original to backup...& ?; o% ?& \; }
    8 G0 Z+ w4 ]- z, m+ J
    os.rename(file, back)
    ! U6 v/ b; a( O7 ]9 t5 I8 V4 Z
    ! U" Z, ~5 S7 a4 b2 y5 ~   
    - R% ]/ K# z- P4 w: y- @0 F& b3 T! j* O9 j# V6 B
    # ...and temporary to original
    % s% R5 |0 q1 ~2 Z# l  C. p. H
    5 r/ k3 y4 Z8 V6 M6 _) wos.rename(temp, file)
    1 }% @, n$ v/ S& H% {. p3 r8 f: G) V$ k; J+ ?4 p0 t  H4 z
       
    . C9 n. ^2 t( N, L/ F
    ) m. _7 R" ^: t4 n# e9 |5 r; k# try it out!' w8 S* ^0 K" S7 @% L2 J9 \( m
    9 l( p  ~$ B; {
       9 ~4 i9 J3 M8 D

    2 ^1 S  [" j$ D4 r9 ]" e& d! N! C7 Nfile = "c:\samples\sample.txt") V; A$ X- d; @7 V4 C7 d4 U

    9 g6 d  }8 U, }4 S8 F( F   
    : Z* e+ g, Y( |# i+ L/ m7 e* F) l" E" g1 m! Z2 B
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    ; j/ f9 g+ M1 ~
    4 `1 \" R* Y( t" t* D7 |) Z; Hreplace(file, "tjena", "hello")5 R9 {& x/ J. _+ t9 e
    / o5 l4 T/ n! y# B3 M
       
    . C; e, m% J; U* t' |, m' c8 b3 m7 a* v
    2. 目录操作' H) H; [8 Z. G  P3 J3 Y
    3 c+ d* k$ k4 x6 Q3 Y3 y9 L$ C
    os 模块包含了许多对目录操作的函数
    3 f* E4 ?* z3 r1 |( J$ a
    + n# k! r; M8 z' N8 K2 T2 F8 Klistdir 函数返回给定目录下的所有文件(包括目录)4 w: [) B( w5 k; ]$ _6 @0 I
    # t( F, Y7 V5 H2 e/ e
       
    : P' i% _9 n. p2 L
    ( J; m# }" `1 f* S. timport os- B7 U1 q& u. T" \- u: m2 S" k
    5 p; b1 P6 K/ L4 z
    for file in os.listdir("c:\qtest"):/ F$ a0 t4 q* b: p6 N# }* ~

    . R! x# h! B+ e1 D3 E5 vprint file8 W# {3 g' n' X

    0 `! o" X5 l4 Z. `5 q3 z) c5 P   % O7 G3 {7 v# Z( J, {- Q& i7 R
    / X+ W7 C' I' u
    getdir 获取当前目录
    - e; q( d& t8 s
    8 {: k9 G. V' ^7 s- T. Wchdir 改变当前路径
    # L' ^. k' n% d' U3 |
    : y8 e( q* Z8 t8 j  i   
    ; G: ~5 z( L, {  Q0 F" A& K# y
    . X6 L2 o3 F3 C# K+ T9 e' K0 @cwd = os.getcwd(); u1 Z0 m8 [1 @4 E! O

    0 E, Q  f. \3 l% Jprint "1", cwd
    ; x' u' r6 w9 U
    " G; W3 A. Z- C; H) |- T6 ^7 d& O0 n# go down
    6 Q4 w$ q- {0 W/ B# W* H/ s0 j+ F2 ]: ^( r4 m, z* Z+ z
    os.chdir("c:\qtest")
    , w, H% V9 i) P: s. t' k5 `; H8 a  b& K1 o& j
    print "2", os.getcwd()( H" K7 [' X! E9 I% ]
    " ^9 t8 o* v! u1 r- m  g; Z# }% x
    # go back up
    2 l5 `. e  i) R4 Q0 _% D) v
    : N- J- k& h! g: oos.chdir(os.pardir)#返回当前目录的父目录5 @; f  c, r1 O+ u* n  C& g  D
    ; D2 }# l: I# \3 a4 M5 V
    print "3", os.getcwd()
    ; k# \% l7 Y/ o( M7 X
    ( b6 A) [, n1 Q) O7 h   : Z. N- J% E, p& W- Y. E& J) c5 p, U

    % W$ [5 ^: }& ?& H6 tmakedirs removedirs 生成和删除目录
    ! J) t# \8 R9 R9 V
    6 q4 h1 i  ?+ c' d7 T: w' Pmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除; b0 d7 L1 Y, W( k) f; J) a

    . x0 w4 Q( g* L! J   
    , \4 C6 E, x. p) B" `0 B/ |4 E9 G
    6 i! e- ?( D- z0 Nimport os8 v! r7 Q9 f$ e" A6 \9 E

    / o9 i4 N! @: S% b; E5 t8 ~os.makedirs("c:\\test\\multiple\\levels")1 O/ E: x2 S( V& [3 {
    & }' m+ I1 X( w2 a) I0 T" S
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")/ ^  c9 Z2 s% ^, m8 ^

    ' E4 @& y; y. h* j8 m5 `fp.write("inspector praline")
    $ x3 L+ v7 u8 m/ V6 C" ~
    / Y' `4 h- g1 r6 B9 W, Bfp.close()
    $ r0 \7 n, i5 v6 L% Y3 R, i$ n5 G- U  O4 n) L. R# [( D
    # remove the file
    " V3 }* G/ I9 i8 q- B3 ?8 v  S9 X* X6 m# X6 ~* e$ A; A( D
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    5 b/ H5 |4 g! }& m7 p1 P$ _9 e! _, |/ p
    # and all empty directories above it
    , J7 ~& x- o* Q9 e1 W) B* O; L1 ]; d: Q# R* `
    os.removedirs("c:\\test\\multiple\\levels")
    " l1 Z0 f# k3 H. q, h$ j( h$ z
    1 k( R* I  u7 H3 q- X4 D" q   
    : N" X& X% `' I$ Z0 P( q
    ; A7 K8 X3 g- K  }7 m: [mkdir 和 rmdir只能处理单级目录操作.
    4 O6 e" b/ Z+ a  m. s# |* i. H9 Z7 E. ^
    若要删除非空目录, 可使用 shutil模块中的rmtree函数, s9 f4 }( J- Q$ x
    ; U3 \( @! w1 g& q" G$ _
       3 r. K9 {, S8 a# V! n

    ! a: k* ^0 Z) i. f3. 文件属性的操作9 J2 }9 D( w; {2 U$ q/ z0 }) y

    1 L  E4 H, a, v1 X* jimport os
    0 y# S6 e( L2 }* ]  n4 N4 n- t( O* X! r1 q9 V/ b4 `* U
    import time
    , t# R1 k/ B; Q# n4 \$ Y+ \+ ^
    1 T* y9 B, P$ wfile = 'c:\qtest\editor.pyc'
    ' S  @! q: \% x% T) q0 r) Z" k$ q4 z( X8 b6 b3 O* T% v5 v
       
    9 u5 l2 k9 v2 [; X9 Q# V' I3 @3 v; R  G$ j6 N! f
    st = os.stat(file)
    7 f" [. m, E, x  H$ m6 m5 n) D
    ' |; a0 |0 `4 ^print "state", file9 Q+ e( x$ Q4 \5 n8 K: J5 j% Q2 Z5 u

    + Z2 _5 M  e( L  y4 _6 d; J& D. f   - l  p1 Q& x2 s5 q4 p

    ) D1 {) a" j0 \5 k4 W+ O6 c/ |def dump(st):
    6 T. l* q& T+ ?7 @' F( \4 u0 _) z' H
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st! j8 M4 w* `  I, J0 G7 c: _$ w6 G
    6 R% c& O$ _/ {. F
    print "- size:", size, "bytes"
      E! q7 h, v* ~5 ?0 S! J. a
    " z2 I3 t" N8 a1 uprint "- owner:", uid, gid  Y5 O% }1 @+ O, t) ~/ A! J4 o2 s
    : U' E) L3 A# x# b5 |; ]4 b
    print "- created:", time.ctime(ctime)
    $ L" O5 b1 m( O3 m; q7 s' }& B$ _5 g& J2 t
    print "- last accessed:", time.ctime(atime)9 s5 g3 d0 i, U
    3 z3 F) E9 \( l2 R# Z& O
    print "- last modified:", time.ctime(mtime)4 n% B8 o& Q  h. Q; Z. Z4 C2 q2 ^

    / o4 L9 d- a, ~print "- mode:", oct(mode)
    6 F- ^& ~+ G, c4 b* A
    ) v& C$ T- D3 R- ]4 R% [print "- inode/dev:", ino, dev
    * s) A9 w: ]( X% {* P3 x1 p
    7 [7 ]* ~, n+ a( C" ?   . c8 k4 ]! [& `* ^

    " C& T! Y  i7 j3 g+ @5 Jprint dir(st)
    ' s$ h/ ~& b" o% R0 D) |$ m6 a) j* U3 @* b. ^" I3 ^4 l
    print        
    ) s& H# y. N0 T. d0 F( ~3 p. M. T) T( ^( }; V5 n
    dump(st)9 }+ [8 B/ f/ x2 C4 J7 d

    ' l1 p7 ?( B0 b2 q# print1 j1 z  C5 ]+ A6 |3 b

    * D1 s! n- o5 j+ C" d4 t* W3 Q4 k   + l; K5 E( H3 h; i3 N. c1 i
    $ N+ E; }/ }/ M1 M6 @' v( R) O6 r
    fp = open(file)
    ! X* a2 \: u$ S6 i6 ]) Y0 Y% D7 X' m$ [% o
    st = os.fstat(fp.fileno())3 _0 f8 q7 e* X; E" G" Z& _

    * Q5 H' L  @; c& `5 \+ i* bprint "fstat", file
    / c* s7 M5 r5 ]0 H8 O! f, F
    ) @1 R. S$ K/ \* C9 O, Zdump(st)
    : h5 k* D7 c3 O7 ~. W  c& i4 ~& Z# E$ N" ?
       # H3 g, K* t, z4 K7 q
    ' u# y: Q. F' ~# `; [0 v
    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):* P+ T6 ?% o" [" s8 \
    7 n0 `# C- v& y- I5 a
    os.fstat(path/file)
    3 |5 ^+ D6 q3 _/ p3 H4 h4 t; m9 v7 \3 s9 j  ]
    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 . c/ T! k* V* v& t
    可以放进文档当成附件下载的!
    1 C8 L0 t; c; V" P5 V) X
    很好的建议哈
    回复

    使用道具 举报

    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 09:21 , Processed in 0.492967 second(s), 65 queries .

    回顶部