QQ登录

只需要一步,快速开始

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

    6 e; e- P- u3 N3 E) v5 u: E2 |8 @
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作+ n9 X2 P) }. @# s) c2 q0 M

    # W# {; G: f9 Y6 F& j   
    9 u) f( I9 J( @8 O  b  L! p; Z6 I- }
    1.文件操作: B  r  d* j: D; s5 K
    0 ]* \& y8 |7 ~0 j2 z" c  @5 _, V: r  p
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    * J) x/ r6 K$ w
    ' _# N, L) d% @0 d# v4 @ 7 q& H8 q5 {% _, M! x# e& |$ K% o

    & S+ ]7 h0 P* J( L: dimport os
    # Z9 e/ L  g. l# Y, ?- h
    1 w# S0 K, E+ I% r( p2 iimport string. Y# N/ ^+ e& A8 f# H2 \% S
    0 i# V2 G4 U! n" `# G
       
    / ~- r( v% G9 j7 @+ a) y, `: k' }6 V8 W$ u" M
    def replace(file, search_for, replace_with):
    : ?; R0 Q# L( g# M  D+ F' P+ m
    2 c: g# T" m( r; h$ X# replace strings in a text file
    $ o- f1 d# m' h5 f" {; ]( K' Q
    1 {2 @& M% T1 v( T3 E( G  N& B   
    8 ^9 v3 O9 F0 u5 G' N0 M% i: s
    ; t% G  R5 \% R0 xback = os.path.splitext(file)[0] + ".bak"
    9 v4 h+ J4 y! H* B3 s1 [: f2 J" P2 |$ Q% T& Z
    temp = os.path.splitext(file)[0] + ".tmp"3 F; g7 Z- g  h! i4 n: ~

    ; G5 i/ G5 H: o8 I* f- o   2 {( S8 e* @+ W, S0 X/ u0 ?+ O) \

    * M: S- N$ Q+ ^' @9 W" Ytry:1 a4 h. x; ]1 E$ a

    ! J% S' J# E5 P( s# remove old temp file, if any8 G3 v" b, N0 l- n

    9 h: r% A  C- L0 b$ V/ f( Qos.remove(temp)
    ) h6 l! k! c' [
    ; H5 m  U. N7 ~& P, l' ^except os.error:( x$ b( l, {% f- q! T
    ( o9 R  B3 R! X
    pass
    8 e6 O: z" z' C* [1 Z
    0 d- i% c/ V! c2 y) J; z, P" D   
    5 i1 n4 t5 U6 P0 Y  F9 R4 b
    6 V; i% o6 C0 U' tfi = open(file) #& s  ~5 \0 P8 `$ k: r

    - J; f& M' E* c' ~fo = open(temp, "w")        #. ?- ^' k: N" l4 K# x
    1 m6 N" H. d6 c" v
       
    ) Z, N+ v7 o4 B) E+ u8 o
    # s: ?% X5 l$ U% k1 y: v  nfor s in fi.readlines():
    * _% T3 A" e6 W/ z
    5 x; ]6 ^5 `) tfo.write(string.replace(s, search_for, replace_with))
    * }: w9 e/ B1 I; ]) {% c" \1 Q5 W, |
    / W% ]  y( j! V6 N   - a9 ^7 w5 r' U4 Y) A+ ~

    $ f! Y  ~+ `% t/ p1 Dfi.close()
    : F2 u( n( o  i& j. ^  Y
    7 c+ G( ~+ I" q5 p/ Cfo.close()
    % `% O* Q3 k5 I7 c0 ?5 X5 t. x8 S' q! Q3 P! K# j, P; l
       
    3 s( D9 v" g- I" \) }% }3 z
    1 s6 ~  M6 A7 _) a+ Ktry:5 D% P# w8 q9 M! J
    : s+ s' l8 O; V
    # remove old backup file, if any
    9 t: w: c5 A" q  H2 X* U
    ! q; z( i/ Z9 Kos.remove(back)
    3 v; ]$ K( H  u
    / C2 Z! G4 H# F- a, oexcept os.error:9 j3 s0 i! z" _
    ) {. ~1 t  E4 s
    pass
    ; Z6 o+ n4 Z; c% y  C% z
    " [: h" }4 c8 n+ Z- V  e# i   7 e' a5 k; v! g: d. z5 J
    3 X: y+ l7 v4 W) `, Z+ r
    # rename original to backup...+ ~) n2 L7 G* |8 i( L8 r( R
    + \) N7 G$ U6 z# G) n# [2 S$ f" Y
    os.rename(file, back)1 ?# H0 C) u! [; q
    " A5 E# m5 b0 f7 |. c& S
       
    ' o# ~; @* h$ g/ R- Z& L
    7 X, r, E0 Y* W7 e% n0 l/ V4 v- ^# ...and temporary to original" n/ K) A4 L" o1 t1 O! ^8 I+ \
    5 \5 I( B* [" M% Z" {
    os.rename(temp, file)' ^( v% ?8 s/ K2 \9 j
    . Y4 U8 M/ {- {( E
       
    # D2 h2 ~% l# K6 C2 m2 N9 v5 E) Q' J* H8 a  q$ s
    # try it out!; f* a  x( s6 C' O
    9 e, d8 ]8 c0 m+ K8 v% H6 e. B
       % V0 F) @7 w9 W8 X/ ~. E# z
    # I) `- q$ x2 Q
    file = "c:\samples\sample.txt"
    0 b9 q: R+ v! a4 e+ Q$ m/ ^. A) t" S9 t* k; L5 s; t5 b0 c
       
    ' H7 B' M! u" K
    7 C- ~. E$ t; vreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena# m5 x- n  t5 b7 v% k

    5 H6 _8 v4 E6 A; m' rreplace(file, "tjena", "hello")
    8 w  T. t' W& T" H! l0 Y2 h3 @1 `+ P+ t% q. e4 l. i
       
    1 w- ]5 m+ Q8 B: c/ s. J- K4 V
    0 S: j# g$ c0 v* W1 {, b2. 目录操作( ]! c% d9 C) O! O/ K1 @& j
    $ c2 b6 ?$ s$ L& j4 |/ `+ ~4 z
    os 模块包含了许多对目录操作的函数8 K9 Y" ~* ]" _
    0 z6 _$ ?) V+ E3 ^
    listdir 函数返回给定目录下的所有文件(包括目录)  w* ^$ p' ?% X6 {9 {( {1 O

    ! T% k8 [+ }6 v3 x9 \# r$ \) U; i8 q, ]   " h* F& B. d5 C- M3 W
    1 M( X: `- b! |3 e
    import os
    ' B8 q0 X$ x% x
    " j& f3 O; e% Z6 Yfor file in os.listdir("c:\qtest"):8 A" f, _6 M6 x4 \2 R" r' L
      ?9 h  C) s4 Y' X1 u# q  y. I  `
    print file
    % [6 z( ^; x6 p! L9 V+ Y1 f
    % X+ O9 K0 E5 z8 \. I   2 t9 m8 H- A# A
    " W- I* \4 r2 U; Z9 C8 P
    getdir 获取当前目录
    " a' a2 S$ @: e; o" D! P+ |* M& e5 ~5 B  J0 [# p, ^+ N
    chdir 改变当前路径
    8 S  y5 B/ g6 S; D+ j8 _4 v  b  I7 b* z5 C
       
    # Y; X& O. J8 `! l; ]0 e& S) m, w, a9 i8 B" c4 V
    cwd = os.getcwd()/ S9 A3 v& i9 l! S
    - y, C" O7 i/ p) x; u
    print "1", cwd
    # k; u) `* J* @9 n5 S4 [) O0 x2 H. r* H5 J5 b
    # go down+ R  n& _1 {% a4 Z- ~: g

    * d6 Y8 ]' e, M! B; t  \os.chdir("c:\qtest")
    5 C( g6 S9 P3 j4 A! E" j) S- n0 f9 r1 [+ v. \  y8 _3 y* W
    print "2", os.getcwd()
    1 e3 N3 |) N% J3 B4 ?5 h! Q9 ^* a( c& w( F$ a
    # go back up% h- }) L& W$ y0 \7 @) C0 c

    9 P0 I  J6 v  Qos.chdir(os.pardir)#返回当前目录的父目录
    / E- `3 `& U/ [& _4 T
    : H( E' H. D* |6 B  x! K. ^print "3", os.getcwd()
    / ?0 X3 d9 B- C, f- A+ r9 D. l' j) {6 j0 i) Y# n5 E, P
       $ f9 Q/ `2 r5 ]- ?

    9 N$ B. G; Y5 w9 L7 D: Z0 fmakedirs removedirs 生成和删除目录
    9 P  W3 d  C! [; l+ n/ Q/ O" }$ H% D4 Y% ^( Z; {
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除9 F& R! o' d6 ]' Q4 F
    ' U: l2 O  e# N1 M5 u; @; n- q
       
    & W4 I' C2 o  e# F( a. d: |3 I- s) k5 G
    import os+ }8 v+ K9 W- r% h4 ^- [
    8 z1 V# r, s3 w4 _) c$ T, S
    os.makedirs("c:\\test\\multiple\\levels")
    / |3 U3 k, K" ?: e1 {( f) B: a6 x: w8 Z) _1 ]% M8 [
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    ( t  t! H1 I0 E' E0 V  O: o" I! ^! p& ]6 `4 \. @
    fp.write("inspector praline")7 r' `. Y( Z" G9 D# X  B  Y9 `) |
    2 ^+ M( S! t5 O$ `5 ]
    fp.close()
    ) d$ K) C; A3 T+ `' t, |
    $ V% `/ }& a/ I6 p# remove the file0 `; R3 S+ T5 g9 s  _
      K2 E% {- Y  V
    os.remove("c:\\test\\multiple\\levels\\file.txt")# |: h, c3 g4 s% ?, E
    5 {/ y, H) m8 O2 B
    # and all empty directories above it- r/ g3 F$ s+ K  c9 L. J2 q

    6 Z% D" T8 c" g7 e/ {os.removedirs("c:\\test\\multiple\\levels")
    . \' H$ i$ @& ~3 ~# l, j' ~0 h2 s6 ~, i2 n2 K/ j* q
       7 q) V# P" m( [( R& A5 {9 m1 O

    6 W& `) K# z' e, f& ]0 ymkdir 和 rmdir只能处理单级目录操作.) X2 A+ c9 f4 R5 P9 l4 s1 a% a
    % s8 b3 k% s- \0 m. s) {
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    2 v+ q. y* \) _4 _5 z" p5 O! X4 b' p0 ~& y# _: z
       
    ! L- j" e. E9 x' c+ ?1 j9 u' A
    ; ^: z" @/ G2 Q3 Y8 q  j. T3. 文件属性的操作
    4 n- d) w- n% K1 e! L: c4 Y& X/ D6 ?5 \8 ~/ }: C) g- b' q2 y
    import os
    . _% ~/ }* {4 h+ R+ M/ ]0 e" O2 i# ~$ ?" r8 x& a8 n
    import time
    " x0 s5 ^. m& p' Y7 O6 e6 L  m' Y$ ]
    8 L/ y# L0 f9 i8 mfile = 'c:\qtest\editor.pyc'
    8 P& A+ {# H$ [& C# s; T- l. j  y' w% Q" i
       ) t$ [) G* Y$ T* I6 ?  [
    ! V: V  ?1 [% j8 c: ?* Z) |, l
    st = os.stat(file)% l3 W. m( D6 w- a! T
    0 H0 D$ U5 H# o$ ]
    print "state", file# Y, b; d" \8 @- q$ n

    , S% Z+ N( j- t; e   
    0 {' z6 g# }* J
    3 a, b( x4 a- e8 }def dump(st):: k4 D$ v* C4 v

    / k0 S6 p$ q2 s  X- a) [% \mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    * O! F  D( x" U/ g9 n0 G/ h$ T
    - @: j- v+ o  M% i( V- lprint "- size:", size, "bytes"; U7 N4 z, t  S" }

    1 x2 [- q- k7 R' T& c  R6 Q- }print "- owner:", uid, gid
    0 k2 ^% D) [( T# C$ L
    * [" [% {1 {  A" pprint "- created:", time.ctime(ctime)% Z& E" g) A7 L8 y' s

    ! _: S9 v0 k7 h! @1 Lprint "- last accessed:", time.ctime(atime)/ g1 D3 S: Q: y3 E; l

    2 C* V: }. y/ q0 c1 Gprint "- last modified:", time.ctime(mtime)' Z, C3 V1 f9 l4 g

    7 U9 n2 R8 z% ^2 {+ Dprint "- mode:", oct(mode)
    ' A' ~. D' F4 N0 C( u* r( e; f# N/ y& k+ ?/ y' J
    print "- inode/dev:", ino, dev
    ( g0 K( b# r. `6 L6 z' ~( L0 b# F: t& K7 O
       
    ' Z4 K: u7 @, z0 z
    4 E, p- h+ V6 ^% ~print dir(st)3 \3 B+ v5 r. K' M$ K" P

    8 B4 c, ~  q4 w" ?! |* jprint        
    9 U- H& r4 ^6 `; u" s7 j6 [. l) w, v: n8 S
    dump(st)
    6 C9 ~$ q" Q9 Q( m1 ?# F
    3 d- D7 a. j8 N! M" _/ o# print& a1 `9 _3 n  w6 f: V" N' ?
    # M/ N+ P# F) S5 k
       " ]/ M( q! l+ g/ S% D# u' [
    * J* c# ^2 {6 x& p
    fp = open(file)
    # S2 A# i) k) x' t& K
    - t$ d6 f9 v/ }% M% }st = os.fstat(fp.fileno())
    9 u$ L$ s0 J+ y7 @/ B$ U* n- l5 T, j
    print "fstat", file
    & p( T! ]: J( w/ v' H
    " y2 D$ S! X# g' ~% bdump(st)! W0 d3 E8 T, n
    & d0 T! x9 l3 j" k, |
       
    - P6 S4 k6 k! }2 O) E' g" z
    " P; e& N$ [- i5 F' W# O6 r( Cremark: 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):1 X' D* Z9 v! v  E- }9 [& s

    . I: d2 `! `) c  e) Fos.fstat(path/file)
    3 M4 `0 [: E( j( G
    8 l$ ]& j4 _! U7 Z5 wReturn 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 ( O' H; q5 O# _9 U5 \+ d* K+ J
    可以放进文档当成附件下载的!
    . g( F6 Q* e3 y2 f! T0 Z
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 04:33 , Processed in 0.458676 second(s), 63 queries .

    回顶部