QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3950|回复: 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
    - o5 U; p4 z$ y3 o9 T) i. _6 U- u1 ~

    / `! ]0 [6 A: r% Nos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    2 r0 i# n0 A: J/ A3 ~+ `; l+ c: M! `6 \2 Z
       * S6 |7 `& X' Q% f) j) b) Y% b- W9 ^
    + l  g9 K' B7 |& q
    1.文件操作/ q8 C! d6 }3 l: V& W( ^, |  F
    : E. d- y# Z+ t
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    9 q4 t4 m1 M- {% G1 w5 }
    & |) k: M5 E& k" [3 F3 y0 ~
    * p5 D+ d2 @, E! \& w" ]$ V8 f$ d4 L- @5 D
    import os. V# Q6 T2 C4 N+ X& d  c
    ) Q+ [* p: \+ h: ^/ }$ B
    import string
      H- w2 G9 N' F  ]9 G
    9 L- W/ @' T. l2 c9 d) z/ t   + _6 {5 u) w1 J: g! h2 o

    # |$ {4 `' a( w! x8 rdef replace(file, search_for, replace_with):
    9 i6 C$ `4 ?9 v: y- @2 w0 t8 |1 D& y/ q/ |3 G
    # replace strings in a text file3 s' r& j: q4 a8 V/ Q* @& O
    5 Z8 _0 z) o: w0 G
       
    * l" I$ p9 e+ x9 ~: \2 }5 T# D2 q, I3 t5 K
    back = os.path.splitext(file)[0] + ".bak". i7 I9 R; N/ B* [8 ~

    ( c. c$ f, g: J% x9 `temp = os.path.splitext(file)[0] + ".tmp"/ @3 C% ^( o1 R/ q& o2 k

    7 V2 o" ?: u( e1 K   
    * q' _, w! }2 @: q4 A8 Q7 R4 l1 o* ?
    ; N* h5 M: X+ U) I5 utry:. ]6 x$ k7 O3 M$ h/ L( Q

    $ J4 m4 t- z7 |4 @# remove old temp file, if any9 l. u( z* ^* B; s" q

    ) y7 h1 t; l! J; Yos.remove(temp)
    % X& x8 v3 P$ W2 w2 E7 |/ a+ }5 ?/ S! q7 K
    except os.error:& x+ ?% Z! }: `
    " z1 |1 z+ C) d% w! `+ T8 [
    pass
    - N% d* J; b+ w* d- R& g7 v& w( j  H( ]
       , \; Y& f# {4 c' ~! T1 ]& e; `( \
    6 X: ~4 ^" N0 D( w1 w4 u* G1 q7 t
    fi = open(file) #/ |7 i+ ]. B( s6 b- k% A

    9 e5 C# k7 q+ o; u# |8 Q) F- jfo = open(temp, "w")        #! r) P% Y9 S$ s0 h+ h& |" c

    # l, W; W& \; ~$ B   ) T$ x( H7 Q0 U3 x  @, k: H( ~
    ! J% X+ ~' y( A. O
    for s in fi.readlines():
    6 S3 I$ e$ _3 k  F+ R; B( z- \( {! G5 n% s
    fo.write(string.replace(s, search_for, replace_with))
    1 D7 q, g- Y( S' G5 ^
      N+ b$ R' N7 J# G) _0 ]' d   
    ) o& p7 F( c: q
    0 E( @" H+ ]2 i) W+ Lfi.close()
    + u8 Y4 Z5 @! V/ {
    : g& C3 B7 Q: z- U& Wfo.close()6 j7 \7 I$ D  z/ T8 l, X  j0 g
    9 `9 T4 D( ~' O* _- a1 L( B! n* A
       5 \) b0 R$ C: \/ i2 L& ^

    ! x# X& K$ Z) P2 m, s* S  @try:5 m' \' j" [8 H+ i
    . l" O. b  m3 x; f0 ~: H1 j+ n
    # remove old backup file, if any6 k: D! c6 o* u; B+ A' G
    3 H/ F4 O" a3 B) H
    os.remove(back)# h1 ?) C4 V  ^  |5 j5 u% P; D

    6 I. r4 Z5 r5 n* h6 [$ K8 C  Jexcept os.error:) c, V8 D1 l$ m: g+ q" e' R
    ; ^  Y) s2 K& ~+ j
    pass8 }+ K& A* L( z! g

    % E9 z# ~6 F7 y& B* @   
    1 {7 }2 H3 x5 p, f& K* A* \; J& v) ^: F' [0 o( U4 I
    # rename original to backup...
    ( s1 G( Z. F4 d7 H2 P
    + H( Q0 o3 e6 U% e! t+ ]8 U' g* W1 Cos.rename(file, back)
    1 i- X% z. q9 V5 S$ D# O0 U3 r0 p! n. M0 u1 i# h$ b5 P1 q& i+ \
       
    ) ~2 y5 B; v7 t/ B7 x: h8 O3 j2 J. Z. f3 n$ c! r; [8 k
    # ...and temporary to original' v5 F# l8 V" _5 k3 o# h9 K4 ]

    " ~2 }  u. r! C1 Bos.rename(temp, file)
    & I, u2 Z, U/ m( o) D8 d1 R+ v1 R5 n" F
       3 g" s  o. y5 ]5 ~2 R1 i9 q

    ( _+ p+ L3 `5 g$ N5 Z6 w# try it out!5 s" H9 K$ B- N

    " ~& i) c6 C. w" \$ M2 w   1 o! \# @! B* d$ d9 [
    * X) C7 `0 C$ z* W0 ]
    file = "c:\samples\sample.txt"
    * |+ }$ u: a4 d
    3 Y9 G! [, o- R( |5 v   2 d2 F: e' ]; w) x
    3 U7 P8 O5 @4 Y
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena9 u) I9 W0 N# E( C, i. }7 J
    ' E! i0 y7 r. h
    replace(file, "tjena", "hello")
    : Q) h; Z6 K# J& X/ c+ G" m/ ]0 O% d7 I6 Q. A7 n
       
    . B, s- e# W6 Z1 j! t6 {' H' B) d4 G( s! m; _- F
    2. 目录操作
    % j' |& v- H+ d
    : n: b7 y9 O7 j, s" {0 F8 E+ Yos 模块包含了许多对目录操作的函数
    + K/ Z% v: ^/ K" C! H- W: s3 y+ k5 [4 w/ ~' \
    listdir 函数返回给定目录下的所有文件(包括目录)
    9 t9 h* Z6 m+ B* v; `9 `7 ~- o# \( |) o4 f; j! Z2 H
       
    ) ]4 H0 U0 W9 E! T. C
    $ K+ x: i  J7 V& h8 i! Vimport os* K; L1 Y+ _" b) |
    ; W! K9 z  P! J8 f( s$ j
    for file in os.listdir("c:\qtest"):3 f7 V0 L  Z9 g5 e
    ; ]( ]" o8 s3 O. f; ~3 Y
    print file  P/ y) {: F( V' \+ I
    & g4 W# Q! F+ F) |( c, C
       , d. G% N% h+ E+ U: N7 P$ \* o. E

    , K9 r& W& b0 E  h; sgetdir 获取当前目录
    " H. m1 b- v% z& n
    ( P) f  g; `: j; Tchdir 改变当前路径
    3 w" C! v* k/ t5 X. Z
      S( @! Y. H6 }  ]0 I3 e- H: W5 w+ ~   8 H0 x: @/ A4 W7 i( H( F' m" K( T

    & n8 H! X+ x  l8 U, `7 u. L& Kcwd = os.getcwd()7 O% g% o. o. L7 S$ J7 Y( D$ o9 D
    0 Q  u9 t: @, Y1 J8 r/ n
    print "1", cwd7 a  n5 H' c6 h1 I( `, r( N; q

    2 H& L( A% M4 Z1 L# go down3 V* I  Z" i) i3 a9 i
    % E0 I9 J( D, V, _) ?
    os.chdir("c:\qtest")
    - o! k' J# ?( J# m, a
    * c. _' O, V3 ]0 mprint "2", os.getcwd()
    ; W3 j/ J) w1 o; j$ w! c9 Z, C5 M+ g7 S& i6 i
    # go back up! Y' X* S+ _) ?9 M) M
    2 r- f- U8 [- [. l
    os.chdir(os.pardir)#返回当前目录的父目录
    ' j( I1 P7 y8 y* P
    1 c- G8 a/ \( P9 ^6 ~* _print "3", os.getcwd()
    2 E8 X0 c4 D2 l+ e. L! m9 t4 e9 k% m3 z4 h% V. f) p) g; _
       & n( ^! y; u' q& c6 J# [

    . l% D' z7 A6 w: w6 ]$ mmakedirs removedirs 生成和删除目录
    - E3 b& I6 y2 S& M9 K
    * v( [% \6 b" K8 a7 C& B  _5 xmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除+ N5 B" P% Y: O8 U( p9 |

    $ x8 C; r, `, M   
    4 j3 l8 ]* h2 x8 y' D. C( n. A6 T( Q( L) A
    import os* ?2 s6 L, f' W
    8 x! L" n. d( m1 y( k2 }
    os.makedirs("c:\\test\\multiple\\levels")2 Q; D  p- D8 M' E1 d0 q- c) h

    / N* m: o& r& Sfp = open("c:\\test\\multiple\\levels\\file.txt", "w")& |3 b6 N* V* z/ u. @1 Z

    , x8 L9 i4 K! t- x/ Ufp.write("inspector praline")% b: e) j* H/ ~
    $ p( q& A$ [5 S  z4 ~* f
    fp.close()7 `7 d* s. x( j- a

    * r* v1 \' \" n1 A- W, R) d7 [5 {# remove the file
    # n  O- ^; ?% H/ q# {8 N8 Q& P2 E
    % h' w: |  r- F+ d8 l$ mos.remove("c:\\test\\multiple\\levels\\file.txt")
    ; H) a: @1 t) {) @+ h( Z( p* b' g7 @' Z: p; r1 T  W% i, H; V
    # and all empty directories above it
    5 s- k8 g  c$ j4 x- j+ `# I% s' w( E. ?; R" G" j
    os.removedirs("c:\\test\\multiple\\levels")
    % b: O2 v$ V- {. Z* ]' n
    ) M% }' b( j4 E! \: m: J: Z   + @& z8 X- f% T( p" K
    . n. c( @7 s3 ~3 |: A) [
    mkdir 和 rmdir只能处理单级目录操作.. R9 f, _4 X* h! o' [
    " a) l: n* i0 M+ [' F+ o
    若要删除非空目录, 可使用 shutil模块中的rmtree函数' H1 F4 `" V4 c$ w: P6 ~

    % ]5 K' _$ ?3 d) I# L0 R$ G: r. p   . a, {, t6 ]' H* C
    # U/ m1 k* U" Z' E5 n+ J
    3. 文件属性的操作. J) v' ^! w. O" K" ]7 `+ b

    - k% q; \- d/ C/ }import os
    9 g3 r8 J% \( z  d% [* M
    - [. o  l3 q5 W: B0 Ximport time
    ! B4 u" o: N/ F" g- v& `
    6 c0 U) c' ~! \+ l# q. }! j  qfile = 'c:\qtest\editor.pyc'
    8 M. }$ `' A+ }3 L1 w4 O+ g
    3 N6 B& v* d5 b  f7 K   
    & ~) ?2 O6 Z' p7 J3 M, O) D! |
    " m1 O0 T: s% o4 q. C; qst = os.stat(file)# r9 m& O! t9 w( d9 z% C: j7 f
    , G! E4 @' m& L  s9 [% D
    print "state", file. K' {# c* p7 y9 {; H
    . ~: O6 d. c1 H9 Q
       % e9 a, K# \1 G' B9 R( h

    - A+ }9 y; a- _) |8 c# Cdef dump(st):
    $ f6 o, s. e+ o% k. g2 |9 r2 M' t! D, B. j$ Q, `, G
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st. X6 Q  o+ R- z( F. B: Z
    1 l. E1 C* F& m4 b% M- y6 a: t# @
    print "- size:", size, "bytes"( h: T2 \$ _, n4 g

    ' M0 F. [- Y; \5 _1 Nprint "- owner:", uid, gid
    4 J( L! I5 n5 t0 J4 |0 L0 a0 K0 N9 f8 V& {
    print "- created:", time.ctime(ctime)( T0 `2 {, `3 U5 K. q2 X0 [8 s

    ' c, M) ]' O2 k& C) oprint "- last accessed:", time.ctime(atime)
    " L/ V$ [, k; j: K* a: Q! @' G* W* Z& z( _4 H
    print "- last modified:", time.ctime(mtime)
    ! T5 n6 Y& H/ l2 ]' p
    5 Y4 j) I& ]7 t- a0 {print "- mode:", oct(mode)
    ! g! f8 G+ h: K, a% P4 [
    & T5 |7 z2 w" Q$ C! ^. [2 Q4 Rprint "- inode/dev:", ino, dev
    2 ~3 V. ^2 _! Y, I9 ~6 N* w
    4 U- W! {/ c- e7 e  Z- w. r   5 m8 j, z4 m# G
    . u" v& [0 j5 J2 G
    print dir(st)+ \2 u+ f9 k" v5 c
    4 v. r5 z: w+ K8 b  C0 G6 |* \
    print        
    ( j5 A( E+ y# t& F9 U! i! i* t/ X
    7 c+ _- s9 @$ g- @3 l6 Hdump(st)
    4 l0 k0 L9 \8 G4 k! c
    9 i8 C& Q% `  Z4 K' E# print/ |( r8 J5 W5 Y- I& J  W: @
    # h' w2 f, ^. Z
       
    ( `  c/ J5 [  c+ d  x9 f& H% c
    . F0 e; O( ]* C5 S& Qfp = open(file)1 O! {9 ?$ [& a
    & ^6 n: i2 X- E$ E- n
    st = os.fstat(fp.fileno())7 G  r/ c9 v5 x3 G

    % Y& x9 ]( e8 n5 F# r& i% {print "fstat", file5 w( o- V! P6 I- n, R, I8 h& `

    8 E- X1 }- H4 p# Adump(st)  g+ \7 p& ]3 ]" P9 }

    : z* o/ D. ~& V5 t   
    , R. Y2 [$ C, l
    - i, W, w  F+ [, T" c. hremark: 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):; z5 ?, g1 V' a3 z2 R7 k3 H
      ?- _2 s1 \" K4 Z# _
    os.fstat(path/file)2 a6 `6 X" Q/ }* i

    * q2 [5 p' ^" _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 ' I! N' U+ G8 x6 I9 c
    可以放进文档当成附件下载的!

    ; S% `7 ?& @- ]  D+ C" R( U很好的建议哈
    回复

    使用道具 举报

    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-10-8 05:18 , Processed in 0.432824 second(s), 64 queries .

    回顶部