QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3850|回复: 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
    3 Q  [3 ?2 B$ E: b- D

    9 s& K( u1 e$ ^$ ?9 c0 Ros 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    3 @; z8 v1 l. ?0 x( }. l
    5 V1 S6 V# d6 i" u8 U& ~# U; F  X7 R8 k   
    / g( i0 X: z+ h) b
    + j( }  C! ~5 C7 Z  I1 P1.文件操作
    ' H9 L8 O/ v# g. Y7 T) O' o
    / N7 F: ?5 M  W/ C3 Xbuild-in函数 open 实现文件创建, 打开, 修改文件的操作
    - H% }. t, u7 k3 T/ E& [3 P: I
    : {1 Y8 g+ K( ` / i7 ]9 w' v, i* B2 c8 R7 K

    9 V; M3 U0 C* O- uimport os# j3 R: }5 e  j4 v( k8 L2 Q

    ( g6 ^- E  ^: o' }import string. E" u8 z, h/ k" E% |3 Z% M( W5 a
    2 m1 m) [$ v+ i. ^, b- |2 \; p
       ' t1 e7 n8 w8 q* y8 o# w
    ! V+ Y% E. {, \; x+ A6 G
    def replace(file, search_for, replace_with):! P1 K! e* H1 q5 {7 D; p* L" Y

    8 a7 x8 e  _+ `- [# replace strings in a text file
    ; A) B5 c" w0 ^
    * j$ |0 ?/ W' X, T: Q   
    - T3 D, m4 f/ i+ u9 l5 d  g  c0 B
    * d4 Q' R/ q* F# e( F2 Kback = os.path.splitext(file)[0] + ".bak"4 W% d+ a# B2 L& u7 }
    ( [, D- p9 H$ W% \, p+ w  t
    temp = os.path.splitext(file)[0] + ".tmp"% W- p7 l! p0 {) d. Z; P8 D
    ; i- c* s% o. E2 O
       
    " |3 R) t/ ?4 |& D
    . Y2 G4 J+ ?  v9 _6 z9 Ltry:
    , D  Q" W2 N/ x4 H5 l# O
    3 p$ G- _9 T4 O# \, P# remove old temp file, if any# C) B9 C0 V5 @% S3 L  K- \1 H; N7 A1 u

    , Y0 P. x1 i/ [0 x! @# b4 zos.remove(temp), F* i# C3 G+ M& p
    - W) \+ K; ?9 u* m
    except os.error:
    # Z2 F8 P9 o3 S; \9 u( \$ X$ e7 v5 P- n
    pass
    # J+ L3 b, u/ \3 `* z$ r4 ~# M% l: }3 }: s
       
    % K7 {  r# T! t: O" ^2 D; t3 {, t2 e$ E' d4 P: e1 B  F3 S
    fi = open(file) #0 W) D3 G. m( E1 p! k4 D6 W
    ' D# x. _6 t* L; s+ D
    fo = open(temp, "w")        #
    , W5 A  |: m% y% w! h' \0 D5 j, g
    2 O( \+ J3 s# V   0 S/ V1 |2 |0 v9 T
    : b- l4 Z6 J1 l! H
    for s in fi.readlines():
    % ?: m' z" J/ {! _% p+ a' L' o3 c8 m# I
    fo.write(string.replace(s, search_for, replace_with))/ |8 y! Q7 M: S, ]( H
    - Y! Q6 |" e: ^
       ' w0 E  _) v0 P, m

    . r1 X$ q; R' Rfi.close()
    - I7 y1 ^! H0 s3 \! A  r5 {+ U) d2 y1 j8 w, r, I
    fo.close()" h' A( i/ v* [: i
    ' F+ h. ^/ U4 f6 k" g1 F5 W, u
       
    7 D! _1 d0 p/ E6 Z, t  w( `
    ( h& o2 a- I6 O9 ]) Itry:& [. a7 t& v1 X: |0 P; X' W- A1 ?

    ( g7 P9 Z  `% M/ `5 b# j# remove old backup file, if any
    , f! S% L% V& v3 m% d7 D) c3 e( Y
    # N$ ^# h& n9 A; P5 jos.remove(back)
    " i5 V9 l3 t+ b% H1 X& D% i8 Q  p% l6 k0 L0 p" j" Z- I. G. \0 _9 g. \
    except os.error:! I; s1 O# I- {. x3 A
    2 X, C' m( N2 X4 d6 _
    pass! P0 f: E! S. V+ L4 @
    " z7 W& U% h% }
       
    7 {# U. _: r' i5 p" j4 f! \1 R) K9 ?8 x2 p9 r: c. K! e9 o
    # rename original to backup...+ d3 C  J$ ^9 O& U( |- Z
    , q& y6 A- a, F" z3 _
    os.rename(file, back)9 ]  F) Z" Y. ~# \

    ) O, c& ~# b4 M   
    - l  U8 K3 a; ^3 P+ G" E7 X0 Q5 m7 [, G9 U
    # ...and temporary to original
    2 [6 E; u- R1 A9 e7 V: o: O0 m, B( U% D( C
    os.rename(temp, file)0 t: l, s$ T+ R/ l
    ( Q* e7 t1 e& i" l" J9 I7 u
       ) g' I% N+ v: w
    4 K! P4 r3 D' n" C. N( N
    # try it out!
      E+ w1 x) @( i4 `
    , h. H1 |* f1 w- S6 T/ q, [% D   2 q$ Y. y) c% L. L# X; O+ K8 V  H

    % N9 q6 `& K; N/ c5 ?0 Ufile = "c:\samples\sample.txt"
    ! h1 N( V/ ]! `& c1 x/ D4 _! }6 L6 V* D
       ) W5 C6 o. h+ R1 _5 f

    - B' G+ t4 p! G6 t3 ^% Creplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena% U# M+ Z) l. E" C* [! [

    # M8 m6 a: _+ d2 a  m# Qreplace(file, "tjena", "hello"); `- U2 ^) D( L2 z" H' d- Y  t

    7 n, B3 X- i4 |, X1 C   6 b2 y2 T3 y7 `" C4 d- b% S

    ' a' m1 B+ U7 l( F# ]( `! B+ a2. 目录操作
    4 n2 M5 P% @1 H9 s+ D
    7 }- Z8 J: V! g' }, Nos 模块包含了许多对目录操作的函数
    * Q, A5 O  S/ Q/ [5 e8 c" B0 D7 H/ A: G3 t: Z/ r0 j3 h
    listdir 函数返回给定目录下的所有文件(包括目录)
    ; p5 ]* ^8 ?9 r7 C. \- S4 ~, a$ E0 |9 j5 U. B$ u
       5 A: u9 [: x- U% K( {. T( }2 c
    ' {) u9 h6 [# j- Z- U7 ^! |
    import os% X6 O6 P9 h% v8 Q$ O3 Q
      V" T3 C% l. y# g8 S
    for file in os.listdir("c:\qtest"):" r; s" U1 [8 ?% t
    2 R6 s8 F, t% v6 I, a( n; I
    print file
    . Z: E' @) B/ P* l3 G& t( H6 z8 F, \
    $ z0 C: K6 h1 k% \( {   
    # o; z- V5 O" v5 `! }- N( w3 j! R$ V
    getdir 获取当前目录# B5 C/ e# L5 U2 j

    + d# I9 e- S$ m0 f; D1 zchdir 改变当前路径
    3 Y! `9 p8 C: P# l& p) Q
    + x6 D# J* G# m' f2 H   
    4 {6 [  d& L. K$ ?8 t* A2 @1 B2 k  O$ e5 v! @3 M4 w5 O; p
    cwd = os.getcwd()
    ; Z8 E' ?1 f! `! u( P7 j7 _2 |. y# i- x
    print "1", cwd/ w2 W. v" D; k% x7 y

    % @' [5 o4 K4 T1 P1 ~6 t- o4 I4 E/ g# go down* p' e2 t$ e- C, N  z- `7 h
    ! ?9 y" ]7 {# m3 p( S( S+ q4 Z  a  d
    os.chdir("c:\qtest")
    0 H; m. W. O2 ~) k5 G
    6 w% I$ `7 o# }print "2", os.getcwd()
    9 P4 X0 u2 w) p& z! Z* a# F* R* r# l2 s" e! l/ b* C2 ?! Q
    # go back up
    + k" r, @( F' K1 W. W- Y7 n0 K
    * r8 _. V3 s1 _9 Q  ^. Nos.chdir(os.pardir)#返回当前目录的父目录
    % M* H; P8 B% [! U3 d; ~; i
      S) {: q3 u& `1 S+ lprint "3", os.getcwd()
    ) L, D- J1 _  Y' m" T7 M$ J' V
    ' j. ~/ A. ~7 d0 [, Y   " c# v8 F! F& N* @1 g

    # S7 ^( L' S0 \+ U" R/ C) ^2 Hmakedirs removedirs 生成和删除目录
      ^7 h$ D6 r, R* W9 E0 a/ J2 ~% y7 `! N
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    : O' T' C' \0 L" C
    + t1 l2 R' b/ X8 H' {% F: M+ J0 ?3 A   . W( }% {1 \) i/ O# j

    9 ^2 K/ B$ w3 x6 [0 m7 ?$ himport os
    ( Y2 f' x& ^/ p6 R: ~' l: q
    $ _# s. L7 w/ _4 H3 k" tos.makedirs("c:\\test\\multiple\\levels")
    ! c. `$ a8 r- u  {) B6 z: x2 G: x% N' i) s! @0 `+ O
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w"); C9 L: H) U6 Q) e5 i
    % T% n# ^% ]9 ^; b8 d
    fp.write("inspector praline")
    " h* b7 O& o, H+ E
    ' R8 Z$ X* O- {6 I/ D) ?4 nfp.close()
    + D+ O* \" ], ?! r
    , c& l2 A. d% [7 d. }; F# remove the file
    / d! t9 J6 K! T
    - Y$ U. P1 m0 bos.remove("c:\\test\\multiple\\levels\\file.txt")" C+ _  P. q/ W; g& P: \  X
    " A3 G% {# s! M, C* R1 p, f
    # and all empty directories above it( c: u8 K; d0 _$ W6 g

    3 ~) V% k$ ^/ U; d) P2 ^9 _os.removedirs("c:\\test\\multiple\\levels")
    . a8 f: r, ?! q. u5 T
      I& ]2 G6 N8 {8 [1 b   
    + d5 Q% |- W* }
    / Q1 C9 G8 P" G( n" n" kmkdir 和 rmdir只能处理单级目录操作.
    8 N& K2 b9 x4 i! \& G! `+ x$ }0 C& S& }- t
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    + N# {9 e- w- z2 ]( q6 p
    5 g* m( X* O' r  I1 S' y2 c   
    - Q3 _' f* W' p4 ?6 |; H+ P
    / X6 w$ E) s2 q! R# \7 L3. 文件属性的操作0 \3 X+ z) Q3 l4 e# U; u: v
    9 `+ o0 c- m4 b8 j+ M0 z$ b4 Z
    import os
    $ b. {# @, m9 ^" V" Z7 K: ^' X& p
    - M: Y6 h- R! n4 L) @& qimport time
    9 {% E( a* I( g$ Q8 Q
    ) W" P6 h4 k- s: I1 I6 Mfile = 'c:\qtest\editor.pyc'
    + ~! b5 R9 ?5 ]5 [- T0 `3 ]9 l
      D# C" d( B  X& V" `   ( a* Y7 F' v9 z' R
    " V1 |, J7 a% H& v
    st = os.stat(file)$ F3 n* c9 e) n
    + m; i+ b0 r! h! d# [
    print "state", file
    5 ~; \/ a# w3 J' k/ L9 m- M* B8 [7 D2 D
       , k9 f9 k* Y- V& N% w
    % ~' V* G. P" k0 A
    def dump(st):
    7 Q3 z  i6 G- Y6 q3 W6 O+ g% |2 @. g8 R
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st) O8 L0 u# j8 i# x; W2 K
    9 P( t" C& i' n/ ~4 i8 G
    print "- size:", size, "bytes"
    : f/ e+ [4 V( A: Q3 b' ?. o" G! F
    print "- owner:", uid, gid
    4 _* y  H3 j0 x- T* b+ q5 _2 `: B
    : U: U" x# s. w, D+ X; Nprint "- created:", time.ctime(ctime)
    & E2 p& b; w* C8 Y
    , y* i7 u; H, ]' c; Fprint "- last accessed:", time.ctime(atime)
    ; ~1 Q; v, P# C7 D  e+ d- o* n2 s( b  n9 U. D) @" X, v) S6 ^
    print "- last modified:", time.ctime(mtime)
    2 p5 G7 h# H6 }5 ~. K: c; L8 ^. D4 _
    print "- mode:", oct(mode)! |9 S( @$ g& P1 y- n! X6 ?
    ) L8 U4 }: m/ C( j/ {( y
    print "- inode/dev:", ino, dev
    3 }+ U4 p9 y1 e  Y+ r5 N/ @; A
    0 ?" M5 b0 i: x0 p( Z: P2 F   
    ! I/ G" y" C& }9 c# N
    7 K2 Z; P) N! r( N* h% q* N+ M3 kprint dir(st)
    5 T' z0 }; \: u3 `
    & z1 C7 u1 H9 Cprint        
    0 Z3 A7 o4 s) v
    6 h% }  _6 a5 i. I! n3 e- bdump(st)8 h+ n& f. F+ o$ {

    & l7 W/ U/ L! r  N, t# print
    ) m9 e7 e; w' H1 \, T7 _/ u2 d
    4 G$ F) p# d1 O% m" ?* ]) D( o   1 q) t3 W4 P4 C7 W$ f

    4 i! i3 w( _! n- q1 cfp = open(file)
    ! z, @. _- I! z2 s1 G7 Z
    , T% N0 v3 z, N7 M! L4 z: Hst = os.fstat(fp.fileno())
    % l; I0 M. m( m9 Y& ]
    + a) `, W3 i- r# Cprint "fstat", file
    $ c4 w& Q, F5 p# u" q
    ' P3 V+ u  o" Y; ~dump(st)
    6 M& C+ M  L% o5 Y0 i/ h3 L: Q; r) N$ I2 ]; K
       0 W+ t$ S) X$ J
    7 I9 ]* s' O7 E% q" L  ~
    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):
    % L3 {2 U  M( y6 C
    8 F3 I" V" M+ S' W# T# K& ~/ c0 [: Ros.fstat(path/file)0 T8 L$ h+ v* e2 V$ P; c

    * @' S1 Q3 G1 V) i$ M" y3 u, E( AReturn 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
    " p3 q4 ~, V- @# j6 d/ D7 m可以放进文档当成附件下载的!
    - L9 w. B, Q( J9 d. K( S
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-11 03:43 , Processed in 0.374000 second(s), 63 queries .

    回顶部