QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3800|回复: 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
    . u. W2 r* B% S$ C

    * ?7 n7 E+ {9 y/ M6 Sos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    * ]7 P: _- }/ L  R+ X6 _1 T& s
    : ]* i* ]% S  d   
    & v% p- S8 Z. K4 `
    , J# |( R4 O- N% i" ]0 @$ {+ D1.文件操作6 s, W% C: J. J4 G+ L, P4 ^9 K* J
    7 x* a- s0 j& A. B! Z  P
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    ) `5 ~3 {- m; G  N& t' X$ D6 `. M/ j" q1 |
    5 c# M6 q* B' B3 h- n  S5 K* I
    4 W  E# k: ~9 K) i9 ?
    import os
    % \& T8 R( y8 @: f+ i/ K( A2 ]3 Z$ Z2 `- Q
    import string
    , i* K7 D' [( e/ I9 z5 U9 H" \8 P1 t7 O) i" j2 s
       
    / H# U$ ]! h2 c9 X, z/ z& G% o
    ! {# I9 X% G2 V* j0 O% W4 _def replace(file, search_for, replace_with):
    4 `+ P# H$ E$ p3 t8 K6 F: T7 f) k0 [
    . L, L5 O4 F2 d, X3 Y+ |# replace strings in a text file" f! X5 e4 F7 U# e# G
    ! a9 y* n) D) I
       , {2 `, F  b3 X. \3 C7 B% ^

    ) J0 Q) ?" P; w6 `2 u" A. pback = os.path.splitext(file)[0] + ".bak"
    9 @1 D7 @3 [' K: }8 ~% n7 v. i( k: Y2 _  F7 e) t+ g
    temp = os.path.splitext(file)[0] + ".tmp"
    ' Q& m+ f+ t/ u# c% i* p* E& G) X: u6 w
       6 E: j1 Y% [% k$ B( |8 X
    ' ?3 L. e: W+ b- C+ o
    try:9 y+ G( r4 ]* G) b+ R) ^

    * g) g9 M( ]- k# remove old temp file, if any' O: _2 ]" l! F5 @' D, U& J4 h

    - E& K; j! U) B& I/ Yos.remove(temp)* n5 J( o* E1 h. s) w9 x
    9 C9 V5 F, y  [
    except os.error:
    & g6 m5 F6 [! r+ O% e, e2 R0 k: X1 C4 o- e1 I' u( x/ [- o/ b
    pass! |% G0 t: V$ U% \. g& }

    4 U) H3 N- u0 v6 f* v, J   
    ' P5 t2 M1 I  |0 J& X
      l* g6 i- D0 p% n: Mfi = open(file) #$ t' j" ?5 l; w, O( }+ ?7 q

    . T7 U# ~3 p) m5 ~4 j# s+ Rfo = open(temp, "w")        #
    - w) t: J. M7 o) d% L! {3 D2 K) q7 b6 w- L. ]! K; m* l
       
    # G, \% _+ P3 b  S
    / L: _* S% p3 K- i, `9 {3 Ufor s in fi.readlines():
    ; e% r! R) @$ X8 i1 |: Y6 ?( s0 _3 `9 k. c8 ~" w
    fo.write(string.replace(s, search_for, replace_with))% D5 E5 e1 G9 A. O# ^
    " J; O$ I6 Z+ r' Y) D( L* F) h* M8 \
       
    / a4 _& E0 n! U- M+ {2 w: {$ u5 Y2 g! y7 R
    fi.close()7 Z" a7 i  f9 I  A

    5 G% P' ^; A6 i' c3 e; z/ h+ D( Mfo.close()5 A, C. ~! w) G* _
    - x9 B' U3 P& S0 D% j
         @4 X' C5 g5 Z
      O6 ~9 s# D7 H# L) x) v
    try:; k" D# Y) s" p) Q  J; ?, E# }* s
    / p$ H0 ?  l9 z# u
    # remove old backup file, if any2 f0 d# j) c9 [% L" B1 U
    ) o9 |) E! F$ O& O* I/ O
    os.remove(back)
    * M# C6 D0 z9 M; j$ d# k8 \; R& [5 |( d/ v+ T
    except os.error:. ?& d: U# [" Q: c2 k5 H. \
    & [0 S, u/ v7 E7 J) U4 k/ W
    pass
    ; q7 v* u/ J/ k
    - X8 A- H; W! k4 o! I3 }; [   
    1 T/ K; Y- b4 j9 ]2 T2 ]0 ~- F. w  z3 i5 m* v, [
    # rename original to backup...2 \, p& r' J. k' ?* |- X

    + y+ ?# p: c$ Wos.rename(file, back)
    . U0 r' s' ^5 }" E* k/ l
    % b% i, Z; x# Z2 `. D" A" h# b, ~   
    ' [- G" C1 U( O3 r0 P! Y5 Q' \' O# s
    # ...and temporary to original
    * E" ^' W: f! F/ I3 Q1 |+ Q$ W5 n+ E  T$ ?6 v
    os.rename(temp, file)# _1 ?8 g, Z9 m" I( b3 _& i" x

    , n$ M) v$ T1 E2 s% V1 Y   
    0 ]9 i: ~4 s# d/ T% L: f1 y, i- W, v1 l  j' A% q5 d2 C4 d
    # try it out!) |$ F8 Z6 ~7 r' ~* X

    - b8 ?- j) J/ g: ~: L. s   
    : v- o& a) N3 F2 Q9 g4 t( d( r& m
    file = "c:\samples\sample.txt"
    0 [& G; d0 K% C: v% ]! [5 J1 k6 _* q1 R0 Y3 L7 \$ }5 U
       
    8 P, ~2 s. l4 W4 n% g: a2 y' ]
    : T$ R+ g5 c' f" l- K; ureplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    4 \( x, I8 n3 Y) [8 _1 z
    4 o0 Y# u& z9 A+ b' d- ^3 sreplace(file, "tjena", "hello")/ N3 U- W) E# }1 p+ e9 v/ c) s- j
      q: F5 E% K3 A* I4 s
       9 O- \: [% o5 ~' B6 Q

    6 m& l: x3 f1 i- x, p2. 目录操作
    , |3 o6 E& T  N4 @! |" d  H" D+ t6 D  A  `! n2 z! y
    os 模块包含了许多对目录操作的函数
    # H; `, @: r" B
    8 A1 ?8 U1 W% S6 ^  ]3 Olistdir 函数返回给定目录下的所有文件(包括目录)
    9 m7 V/ C1 [! [3 z; @9 l$ l' Q# r( @5 g, @7 m
       ! ?' X7 b, ?- j( K

    ; s, U2 O+ M/ Q% w' |; j6 Rimport os
    + a/ ~; Y  b& J' h8 x1 T8 H9 x" c1 S: V, y! W9 n
    for file in os.listdir("c:\qtest"):
    5 O5 p- g' ^' V. C3 w0 _  s) a( e. j9 f$ Y
    print file6 R! c9 o6 R* u$ |- f. D) ~2 }' X
    5 [. T& S- Q! m4 }, H* W5 r
       ; J8 }( ?+ w1 g
    ' t) Z. y6 R1 g
    getdir 获取当前目录
    % }# r* v& s( G$ Y6 n) ]
    9 A! {1 G) Q7 ^. U5 v% r/ ^chdir 改变当前路径- S' z4 T$ {7 W5 K

    6 z$ ~  {  t0 S: a; M- t3 O' \5 m   
    . x4 G$ `! v% E+ |& W
    0 w: F4 b' |  j- i, Icwd = os.getcwd()3 _: z7 W" S9 g+ _# n7 W

    . D. k3 W( W- c  F' u. ~; W! h$ jprint "1", cwd3 N' [9 s, Z* w7 H- p1 e; M
    / Q4 t# H7 Y  H  G! s# V1 T
    # go down
    / a2 f- q& ~! K( I4 q4 _6 B4 A8 f+ U  {7 Q0 w8 K2 M
    os.chdir("c:\qtest")' E: i# j; s3 Z( ^
    2 d: R0 L% X, u
    print "2", os.getcwd()
    + t. }0 I8 D% r5 B
    ' A) v3 g, p5 i* N# H( I& r# go back up
    1 a& P/ `3 D7 B7 N/ `% e7 R3 [0 e$ n8 n3 ?& n
    os.chdir(os.pardir)#返回当前目录的父目录
    8 ~9 h1 s* M' U# ?& Q5 H
    4 o2 w% N+ p8 d1 f; dprint "3", os.getcwd()
    # t2 V. W, e6 T" y4 D$ p* @- I  b# g) n9 s5 {+ D8 D2 z  R
       6 Z0 @1 J' e) S

    : B+ y/ @4 {% y2 C3 h+ k* h0 K: D  gmakedirs removedirs 生成和删除目录
    ; W# P( [7 h2 o8 s% b" o
    ! F7 \( b+ F. j: C1 t) O  _% umakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    ) O5 M$ m  r% d9 h. p; I$ @# d# n3 x, t
       
    $ x  _2 p) B: z! |7 {$ D, Y6 L
    , s* E: p* @2 o8 K( S. E( x7 H) gimport os
    ! Z8 [$ O% {" I% ~! k9 W
      I! K% V# j+ ^5 C; Pos.makedirs("c:\\test\\multiple\\levels")9 n) [# V, D6 x7 Z

    , L0 j+ _% Q, k6 A* Sfp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    9 q. c( t/ m/ I1 E; [0 G# L" T% P. u* t: c# @
    fp.write("inspector praline")
    6 u* H0 ^7 r- T
    1 H- u' a- o# ?fp.close()/ r) C$ t0 \5 G# h$ [

    & d$ r( O% ]8 I8 G9 G# remove the file
      _; Q1 P6 g/ ~5 K' }% l6 H/ r, U" p- t4 \3 ]' q- ^9 r: b* n
    os.remove("c:\\test\\multiple\\levels\\file.txt")1 ?% S( f7 X% `+ U/ a* f

    6 o9 ~" a# B( q. z; ]* f* u# and all empty directories above it
    7 o7 J  ~7 P( A# O* y! S5 Y0 R. x& ?& w# g( X
    os.removedirs("c:\\test\\multiple\\levels")2 {  R5 u" m! t0 |# o# o

    ! `% }! ~- X3 ]   ' i3 y' @* w+ Q9 D4 r! @% |

    ) w/ k0 Z2 m: _( u7 E# C" p  Nmkdir 和 rmdir只能处理单级目录操作.8 t9 m! w3 }7 F' F
    ) [* u0 j) k$ V
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    & H9 V; p( m8 G5 N/ A( z7 |: e6 W% ?# \
       # y- n% C# q7 J

    1 k+ s% R; x: q9 S3. 文件属性的操作
    + \- b* U4 \% E7 z( C; q. W! [
    & a' U5 l: [' B7 d! r1 |6 R* Nimport os
    9 K* d0 `! h+ P) w1 P4 W7 ~" W0 v3 b
    import time3 o( n/ j( {! l2 q

    " H5 l# k: C' Xfile = 'c:\qtest\editor.pyc'
    * o1 k5 N0 x% h# R: f
    . |3 U" X# i3 U7 {' v% I6 z   8 j4 r5 @' t6 r% x1 ^

    ( ~! v5 ]) ~3 O8 _; O; ast = os.stat(file)
    , z" s$ v7 }% n, o1 e; C' q2 C* q* d9 y% o$ G
    print "state", file  o$ R$ F0 q0 M& f! x2 I% D, B
      j/ V8 o. v8 o' J( U
         P3 W" w1 e& R2 d. M5 g

    " g3 g( ^: `! Adef dump(st):4 Z! H' ^$ }8 t' }
    ' G  `- L% S4 F: [( ~" T* M
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st' A: z4 s& t1 J. Z: O6 Z, x. I  |
    5 }3 E0 j9 R+ l
    print "- size:", size, "bytes"
    & d6 r% B+ ?" z& _$ ]7 p0 [- s1 h2 _& k* M$ [9 `/ u2 I( L: V
    print "- owner:", uid, gid
    ' U' }  m1 T* J( y+ `0 J$ }0 r" d: h& Y$ \
    print "- created:", time.ctime(ctime)  A. f+ O; V+ B. F) ]+ |

    - d1 A! G2 E( Fprint "- last accessed:", time.ctime(atime)
    , a7 g7 K8 v+ {
    " j6 P$ M- J7 |: ?print "- last modified:", time.ctime(mtime)
    2 N  E+ Y1 R: N, D. ?3 d+ E* g8 S# u, p7 f5 X& c
    print "- mode:", oct(mode)5 J$ ~$ @2 W1 X9 K0 ~
    9 X9 S) l& K" `/ z8 w& S$ a  Y5 ^
    print "- inode/dev:", ino, dev3 n5 p% s6 |, Z

    4 Y4 \( \6 K7 \8 i! s% C   
    # p) }+ G$ B- o' T  M9 {9 N- B) o8 a
    print dir(st)" j8 J  A5 l9 J9 w7 Q. H
    : [- G4 v; l' N. C7 c4 }0 m
    print        , S6 q5 C8 ^. ^% c: N! l6 y
    # D/ e8 M- Q$ A0 D: w% p3 k$ C- X* f2 Y( ]
    dump(st)
    $ e+ g, R2 \5 q" Z3 i6 H% @, x  d
    / ~6 A& I. w; ~# print
    : T$ p' d# x8 S; V( t5 j+ t
    $ D8 x5 H' R$ j  T4 @   / z/ G7 V) [; e6 c% P" r

    6 h) L& c0 _: x7 [8 u4 ]$ v: Hfp = open(file)
    ) D/ \; o) t- r. ]) G8 A' J! d: q! U0 V' _/ }( Z2 y
    st = os.fstat(fp.fileno())
      e' {$ _7 c  B$ r) J
    * S7 {# h& }, z+ q, {print "fstat", file
    ' u! v+ m/ n' T9 c! N# G! F& i% V
    . L1 z. }0 u! v- [) @( {$ Ldump(st)
    # ]+ d) `) l3 \( D$ B2 }8 }7 x8 Y# K8 R6 I* J; w, k6 ]
       5 d  R/ q0 @+ V; m) U2 m+ i- K

    2 C4 I6 O  p8 ]' ^+ _( T3 Iremark: 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):6 P. f5 O; [+ |4 i4 W  w8 g  s

    + ~3 p$ |: n; k- N* w3 ~. mos.fstat(path/file). k9 P9 b( t7 g  J0 g9 G  u# v
    ( A' b# V8 G6 d, C* `
    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 1 x) o& [7 H8 m  D
    可以放进文档当成附件下载的!

    5 C/ o( P* P4 [4 r0 ^很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-20 21:36 , Processed in 0.455166 second(s), 63 queries .

    回顶部