QQ登录

只需要一步,快速开始

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

    4 k( k2 j! k* }0 N6 r" h' C2 l! r) S# i1 T  U
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作8 F& Q: B7 X2 H( m1 {- B

    9 N& D/ m* j; Z- R6 J   
    / x( E! X. k( p8 S6 [2 K7 ~7 c# ~* g! q1 T$ }2 h
    1.文件操作
    & V* N: f, {: ~- A  O
    ! q( l4 j( I# g: H# S5 Fbuild-in函数 open 实现文件创建, 打开, 修改文件的操作
    0 S! {  v/ Q( Y1 i  y, j# p
    7 K# z5 z/ I. `' a  j/ Z
    9 a  V6 G2 X- w, W
    1 D: Z. C( L; p; [/ Z6 Yimport os
    & m7 I* B; _9 N" ]  i; `: O3 a% I' T9 Q* Q8 n3 p$ ]& K
    import string* k3 a' e3 j6 X7 R

    . v& u  k: B8 b/ h+ X5 s   ' H) i/ ~8 T1 U; i& z- r

      X% Q  @# {" u- Ldef replace(file, search_for, replace_with):! e3 l9 t# ^) ~1 x4 ]

    . G' L* Y6 ~! r, G2 N6 t# replace strings in a text file  d2 w2 Y( P' M1 F
    ) S9 w! O# a$ M( d$ n  [: l
       
    2 F. D- D# _8 R. h/ f
    * W( r) {9 d$ Iback = os.path.splitext(file)[0] + ".bak"  K  h1 E- B8 e

    & ?  ]8 w9 o; s8 Ftemp = os.path.splitext(file)[0] + ".tmp"
    8 Y; Q. y/ |+ x: ^9 G" V! i& W: K
       
    ) v  R/ U2 b- V0 n* F
      x: h4 y! s- q8 r6 w6 }# Y+ ftry:" C+ w6 U+ k; v8 R! Q; Y2 W

    + p$ V7 }0 t* x/ r( F- {# remove old temp file, if any. M' f; t) n9 d/ w

    ( Z/ Z2 J2 w6 L$ A, eos.remove(temp)4 V$ B: G9 ?  H2 W$ V- ^3 q0 t# w

    ! N7 S$ ~8 V; L/ z6 ]9 _# B' Q" cexcept os.error:9 L$ A" P$ |/ S5 ^4 }
    , w# a2 T8 Q: a; n5 i
    pass: P! B' Q/ k  ^
    & y" p, q, {/ l- ~: q% W2 z
       
    ) C2 }' E0 q6 r  t9 f; x, I2 a
    # [* T: F$ |2 X' j! X7 Bfi = open(file) #
    & I$ ]8 _( x) y1 R2 p/ m
    8 g/ ^1 l+ q9 `+ zfo = open(temp, "w")        #7 n/ J! f9 N8 ?( o+ H

    . J1 ]+ a: q* A& L. d  v: N   
    3 B- m8 Z/ \4 Q& i% f7 I* E, P0 }4 n$ n" n5 a
    for s in fi.readlines():
    3 ?5 _( R/ f3 T9 i# d1 q8 g+ ~- x  W- Z. y. G0 Q% }
    fo.write(string.replace(s, search_for, replace_with))
    + k4 U  h5 x  P3 @8 Y3 s3 U  z/ u' Q" W4 F* E
       
    ( p7 w2 m" ?5 l/ a8 h' y
    ; [: Y* F8 }3 d# \5 T4 C$ t, R0 @+ Xfi.close()
    5 G! s1 i; J4 w( c4 V
    2 q. h5 y9 S! c; Rfo.close()
    + a* l* i- @) D. g
      m( T$ W/ U, c7 G6 h( Q, Q   
    ( |) E/ t4 u. k/ u8 x
    2 [% X) G4 @2 t4 S% Gtry:! v8 C1 _# B& b

    ' k  k: }! L) _# remove old backup file, if any3 j# H4 k3 f  `

    ; C- W# w/ g. Z3 o- n  b0 g2 Mos.remove(back)
    4 f5 f  q2 C1 H3 g
    + ?) Z! t5 m" Q$ J# U) `1 i3 ^, Pexcept os.error:' i, x  A2 _( t$ L# d( z0 P
    9 G# r% w! g# |9 p3 o+ f6 p
    pass
    - H1 S7 i4 m8 P: i$ M
    ' E; B: Y# v6 {4 @; \   
    0 P4 A* s) y' p" P9 e0 @6 o7 s1 R; e6 b% E" Q! k
    # rename original to backup...
    $ A/ {7 T. w/ p2 y0 e4 y5 O. M0 R/ R: j% t+ D( S/ m. ?$ m7 f2 P
    os.rename(file, back). Q! ]2 e$ y" ^! m8 w" K. S

    $ p; K% S; Y  i   
    ; n' P) m5 `& R' K4 }% w) I. V# L  _: k* J
    # ...and temporary to original
    2 B  n- w" U4 L' U/ {. p, f# d/ W: V8 ]7 Z$ X; r- p0 t2 L6 l; h
    os.rename(temp, file)( k2 _) p5 V* [& K, D
    + |3 `7 ]! l, q% d6 Q" v# q
       1 U) x1 a; w; k8 b

    9 r. e' J0 v, ]' |/ t* Z# try it out!
    / v* t! T( @4 H+ g* x7 I6 y; w8 |; v1 d, p& e% ~  D
       
    9 R1 M+ ^7 B1 r( l; I3 L+ Q  H$ @# `1 K% O$ e6 h
    file = "c:\samples\sample.txt"
    . L# W6 `- D' u/ F4 O2 l. ^) e: G5 _: w
       
    $ n- J9 S7 p6 w! T6 j6 J! U; F" H% n2 T$ U
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena1 J5 I: n4 H; Q& Q' r
    # R, ?7 c* E8 g8 V9 A+ M
    replace(file, "tjena", "hello")
    ! X4 O: x3 \* d0 _6 X0 W7 a! u  e- x4 m, |4 p5 l) g) e
       
    & \; S% ^4 T# k* D5 Z
    & y/ y1 _0 M7 s6 l, C# }* a& ]" |2. 目录操作7 k- |' [; ~; N. @" ~
    - u1 s. `: p- r* i# @
    os 模块包含了许多对目录操作的函数
    : I+ ~+ v7 \' _! g, X7 K7 D
    3 P- \7 e5 J* O' Y* Q7 klistdir 函数返回给定目录下的所有文件(包括目录)3 C' ], s1 v$ N0 B: J" \

    / q( k0 h9 N4 C% {" B5 ?   
    7 P$ x4 w7 N7 K1 f. u! o$ D- |- |: _' Y: k: h) L
    import os  x& J) i! T* l0 t2 n

    & L9 q3 |8 z" T1 Lfor file in os.listdir("c:\qtest"):9 [  q# m5 v2 z$ g  `/ s

    - Q9 t7 ~, ^& o* w; V# U% Nprint file
    ' F7 z7 {! O' A5 a! z0 k6 g3 f6 t! p. r) j! ^$ W  C" s  d) w$ O
       5 I4 x) @$ q, I3 z; L5 i
    5 N* s7 z3 T  h1 K7 d5 b/ u
    getdir 获取当前目录9 l+ U; ~5 l! u0 Y3 E! v$ r
    - ]  d! |; u3 _1 ], g8 n  y
    chdir 改变当前路径$ Q! {6 y# W2 a  h% w

    " D2 Z( _' P0 Q, m# @   
    8 C( \- E' G% F. q# w( d' P6 g% Z- L$ W  @
    cwd = os.getcwd()5 [" m' y, k3 w2 {; @/ R

    1 ]; d) i1 _; Bprint "1", cwd8 d; B  C* y3 r( x
    - z, f& b1 y6 S. K
    # go down
    # s% A+ `1 j4 `+ T3 Y* m6 ?& Q
    # \9 ^$ S4 y9 H0 t5 V% n$ k2 s0 Q9 \os.chdir("c:\qtest")% u: x6 Y2 ]# M
    - G: A# \. x, V+ k$ r$ Y2 W
    print "2", os.getcwd()
    9 T4 J% V- t1 J
    7 n7 Y. a4 k! ^, E+ I4 c# go back up
    6 b2 d8 {' B6 w7 i; I, _0 C, b# ]/ r) b# J1 f. W
    os.chdir(os.pardir)#返回当前目录的父目录
    ' [7 j7 p' t2 a) t; `. ~
    1 k! v& r& V  I' A: q7 l8 dprint "3", os.getcwd()
    : Z3 L; L$ y! s" H* w
    8 s2 Q0 e6 I7 {7 \* |   * m* w# \8 P  }: A0 z$ A0 @
    6 I2 |1 v5 h' g  \- [$ u  u( ?3 }/ u
    makedirs removedirs 生成和删除目录
    - M0 Z' Y; q+ `6 B  F
    6 s9 U6 `( ]' x3 K& K' k* fmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除6 w% M% P3 D. s9 _) C
    & F9 E$ h" D6 @6 T# m
       
    6 R+ `% l3 [; z' d% \+ \# m: z) k  |( c& s
    import os
    ) i/ ?8 w. {; m% P) q) O& n4 O* M" g# u5 o/ f- |
    os.makedirs("c:\\test\\multiple\\levels")& f# ~+ O/ K) x9 z# ?* k  q$ ]! Q& P

    ! ~# W- K+ r3 @1 h- p3 {% t$ t+ ofp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    1 A, c% F0 W( v, L
    # _: I8 C/ z- W2 N! `$ g  kfp.write("inspector praline")
    / y2 V. b, D8 b1 q4 B4 j1 t
    ) {; L, J' c2 H/ sfp.close()4 b; b6 N) ]1 p) I* L
    " y  \# P3 G9 n6 r! [( a4 C
    # remove the file1 z4 a1 a1 q9 E4 x! z# J3 q5 u! k
    , B1 j  m% C$ s9 s6 K
    os.remove("c:\\test\\multiple\\levels\\file.txt")& F, B4 H$ O5 l# p6 L$ T+ `

    % a$ `0 B; E  `# and all empty directories above it
    8 d- h0 ^* C8 M0 X2 N) u4 l1 b& d# n
    os.removedirs("c:\\test\\multiple\\levels")  ]( ^4 f! f- T, A: V

    + q; S+ w8 x( P( {   7 ?+ b6 N$ i. U; I, F* ^- \

    / H/ N, }. S& R6 x( y) v8 zmkdir 和 rmdir只能处理单级目录操作.0 e( m9 `& e' G( q+ A$ J

    / ?& Y' o( x: B* d" S若要删除非空目录, 可使用 shutil模块中的rmtree函数2 z, q$ V5 V6 G  F& d

    & b$ k0 O: R, W   
    ; Y- t8 x( g8 }: ^- x6 g
    3 M; P" B# _" |1 l# h3. 文件属性的操作
    0 w' e! ]% K8 Z
    ) m' ]' ]2 {; d' T4 M6 S, I% x$ simport os
    : m* }' c( O: w, K7 _+ h- b  E" k, a
    import time1 _$ @9 Q! W2 X) R; I

    * D3 |3 i- v! _/ Y" Dfile = 'c:\qtest\editor.pyc'
    7 i2 b( `# ?9 U8 s) ]/ L
    + D! r# M/ b1 [9 n   
    0 H% p6 D+ e" I$ l* g4 y' T  L% E7 e
    st = os.stat(file)
    & f) J" T. g, `
    8 R7 R5 Y% S9 f. G; {8 }3 J$ Mprint "state", file6 `% [; k/ R, i( j5 J$ a

    . H- o( ]) \! c: h7 G   
    " X! y. _( ?: A* a* K( T3 R, l1 [, @: G+ ^/ `* i. o
    def dump(st):5 e' w# r' |" u# o) {' N# E
      ?, r5 N8 g+ F
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st# f& N4 D; T! o5 y4 G: z
    # P$ Y$ |5 ]- V
    print "- size:", size, "bytes"- G3 _; T& h4 }9 n" D

    8 k5 }. ^! V1 }6 p; [print "- owner:", uid, gid' y8 E, {  U" q$ T% u6 u6 p

    3 {- u2 ~( O* m! o0 {! Pprint "- created:", time.ctime(ctime)5 u, r. E1 F+ z# d8 U

    ) I6 i- M7 L( \. h. n) mprint "- last accessed:", time.ctime(atime)
    1 n* I& V8 N) _
    ! a! f0 q- j2 A& Z$ a5 kprint "- last modified:", time.ctime(mtime)8 A; G4 b' Q5 J

    : @0 C% ^# ]& _+ i7 r7 Mprint "- mode:", oct(mode)3 m, _2 T% H' [, ?

    9 o8 F& M+ W8 y( {* {8 Mprint "- inode/dev:", ino, dev
    4 ]5 k2 O* ]0 f: ~6 o" d0 k  ^
    ' ]& T; k( E& Q2 z/ A  t1 B   ( j% ^; t) O0 o

    0 I9 E7 C3 {2 o. W+ Vprint dir(st): g+ W" T( y; i7 S% q

    ' t+ h# A* t" P0 [5 E& x8 Lprint        1 h8 t- r3 r" z8 Z2 w
    ; a: v0 l, Z; V- x( n/ ?
    dump(st)7 d7 {8 V8 f( `) i/ W2 @

    / t) O/ t3 d; |$ Z# print4 p" m% H. ~- M. C! ~
    - B3 g. j0 M1 l  }: d. \1 t5 m0 }5 p' d
       9 l( m: t2 x0 E! U  h

    9 |! `/ s2 C6 W1 ]. ^( vfp = open(file), f) y3 C  S4 F! A- a

    + P: w+ P! n7 M5 Z8 r+ m: `st = os.fstat(fp.fileno())- z. I' |+ Z) U9 R

    4 `! m0 Z8 j. ~  hprint "fstat", file
    * V/ r- {  L4 b+ H6 w% Q: q. s2 K# X2 c6 s2 A6 d
    dump(st); t+ i3 h6 J0 W+ L* {

    3 D6 e& T0 C* Y" Y1 T   * y" M  M4 L. l+ Y- `
    ; Q# j' }: Q$ F3 Q
    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):
    8 r, P# f  ^/ e9 X5 S
    5 |8 d4 n; t& p1 Y: F+ x4 {os.fstat(path/file)2 d9 g& ]+ M7 l$ o7 [! U1 p
    1 Q4 K) Z0 Y2 r. \; S. K5 M" m% p
    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 - K- f) a% p# q$ X5 ~
    可以放进文档当成附件下载的!

    : _' R3 ?; A7 m- j( Z( w很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-14 22:40 , Processed in 1.021683 second(s), 64 queries .

    回顶部