QQ登录

只需要一步,快速开始

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

    % R: M& l; j: g/ T
    ) b' p( d" [% Z: R' ?9 g0 [4 G- Q& Qos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    5 h4 V; h! Z. a4 k/ l; B4 t+ f
    3 C& z* y3 Y7 D. i6 I   ! e1 T; b7 e+ p9 v& S

    , W9 q) K" E, b6 P5 _, j+ Y* A. G6 }1.文件操作4 v8 P/ n2 F8 n# i3 y- Y

    % [# w6 C2 `1 ~/ S! fbuild-in函数 open 实现文件创建, 打开, 修改文件的操作! |; D" P1 K+ s: E3 i$ X

    ! R& ?* |2 X( Z) j5 M/ s! e+ Y
    $ X# r0 _. K' H$ ?+ j# P# D  L# M9 J) P2 h) \0 s9 \
    import os9 F- y1 z$ H4 U, V
    7 |* W  u2 B( S
    import string7 K  g. ~8 F% N: z& S# |

    * }* p  i8 [  E3 G- g% o& h   
    ( m  @# D( x1 h' W; F  \4 R) ]3 r
    # f$ t( d- L& k- v6 [def replace(file, search_for, replace_with):
    4 o5 |9 L; |. n, g
    7 u/ {# F* z$ R2 u9 }# replace strings in a text file
    $ d5 T) v1 R3 l& u! K1 b
    9 m( ~) ]4 {: j% d/ |   
    . Z0 Y3 c7 _5 `- j: R; T0 M' _( Y
    3 @2 F7 D3 s" \$ ]5 D* `8 f1 E: Tback = os.path.splitext(file)[0] + ".bak"! F: C& i- `* |1 T3 z$ _- M% s$ ]

    + I: `' e3 Z! D  F& y. g1 @: W, K$ Ttemp = os.path.splitext(file)[0] + ".tmp"
    * N- K0 E; F/ ]& @# X
    , S$ v: a- @2 f  k; `! }   
    ' T9 w. P  \& b# l9 I% f; b0 J1 E4 N
    try:* W8 o% C7 g; t( y# H/ S  [

    # H* w' M/ c* m/ q7 l# remove old temp file, if any9 m3 Q* |+ z) Z. _" o6 q
    ) I! _( G8 I' i8 [
    os.remove(temp)
    $ D& l, q9 q/ t) F$ g9 y) |" i* ?' L5 Q7 t" }9 \
    except os.error:; `$ H! t% r7 h. T7 R
    $ Y( M  K& R  e+ c8 s, b
    pass
      M# s$ I" A4 ~6 a+ C
    - }; L* s# y5 s; T1 X   
    8 X$ T( E3 h1 f" s7 n8 P! x0 U: E! P8 H) j5 ^, [1 B
    fi = open(file) #
    : _% j; \$ f2 L0 \% q* A$ `, ?4 R$ a% M8 r6 H
    fo = open(temp, "w")        #. H" K* S% q1 [7 a5 G
    % L$ j) n+ O& _' A9 L. v) x5 Y& e1 r. V
       2 K* L; g& y, d1 V8 g

    2 _  Y0 m; Z; n& w3 {2 @for s in fi.readlines():
    & M4 B- P4 E) @, d
    ; a0 i. n, }' L! ^* o! o1 nfo.write(string.replace(s, search_for, replace_with))! @  o/ A! K. d( ^$ o$ J
    3 K5 A4 T% E1 ]& o6 U6 p
       1 ]8 W  _4 b5 |1 U0 t+ B0 s

      t- e( g( ~9 H7 [" Xfi.close()6 C. m$ E# }) X  f
    6 E9 \; y; u, Q
    fo.close()
    2 K9 l+ v& E7 k# P& \1 C% f$ B; c. p- C$ V5 i9 B
       
    ! f5 k1 W0 e* ^; h1 d! e+ F3 @+ e& l+ E1 _) |1 g/ u. y
    try:
    , U+ G) Y7 d, z
      P; T; z: e, O! [' @& e" Z# remove old backup file, if any
    - Y* S* ~8 c" Z* c& z3 T  }* J+ J( `+ D
    os.remove(back)
    , w0 i+ W7 [, \2 I/ l% R9 K4 y4 b7 z6 \; `0 S3 G7 D& g* F
    except os.error:# }  n% j& p- c  `0 F. f

    4 M5 x7 ~- w( B: e; M0 hpass% F  P. j" h9 p9 p% e
    8 M+ _7 O7 }: E/ P' u9 w' S
       
    9 ^/ _  P8 ]+ F* c1 @. n' t$ n
    . S+ x; ]* a& g' p' n( X6 ?' i# rename original to backup..., M! T4 x/ d9 ^: R! c/ z6 q0 _
    : {( K6 g/ K- w/ v# j. {; K
    os.rename(file, back)
    8 S* Y% H; G+ M, u0 s8 }( i8 f: q/ p1 Q! c) o4 s
         ^; R- P" I1 @* z: H; \% s
    + x3 ^: G) P# U$ W+ F
    # ...and temporary to original
    6 o* p/ H! K8 t# \
    " I9 D: |. d, J6 G3 i) `  N8 tos.rename(temp, file)
    5 G1 n+ G: M% s/ ?/ u
    2 ]/ j& N; u) u3 f/ G   
    6 j* \; q+ e, u5 W+ i0 I. h, o1 L* N4 Y3 `
    # try it out!
    2 i- z2 L3 J! q7 j
    " O* l' s8 U1 A( m* \( T0 s( @! h   
    8 S6 z& Z% U* m' b; i# U; M* R2 J& z* M' b
    file = "c:\samples\sample.txt"! W1 y# _! n, n2 F3 U
    6 e" Y# T+ ]7 ^, z
       2 \" B2 a& j$ P: @6 X

    , F/ _6 a' ^& [# u6 Hreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    # M7 n+ n! b! J8 f( k* N( X, k' j1 o: |' k6 A
    replace(file, "tjena", "hello")
    4 a% |4 P- p$ ]) T3 Y! T5 d+ R, p
    0 o+ J, F( r# _3 @( N& O   : o* Y+ z; y, }" j( p* ]3 y
    " [! Z/ ]* r* c' @
    2. 目录操作8 F/ J3 r/ p3 \8 A

    # h' d+ ~4 a/ J9 Zos 模块包含了许多对目录操作的函数
    ' V. S6 ?  H1 V1 u' e$ q5 ?* ^4 j& q! z% A- s. ]; ~: q
    listdir 函数返回给定目录下的所有文件(包括目录)$ c: {1 B4 }) m# C- ?

    ! Q  `. B7 g0 u$ o   ! \, U: R# u, P
    ' `; O* e7 w9 ]5 M- a% q
    import os
    $ s; l5 X2 [5 q
    % _4 h# L4 B2 w( afor file in os.listdir("c:\qtest"):& x9 s4 g, l) w3 I
    $ O2 z, t9 f& n9 f7 \/ a
    print file" L3 O; g; D& g. X/ X7 B
    + K# o$ ]! F8 r, n
       
    - c, d7 Z: l6 y9 g% v% v: C2 y
    $ U& x7 q( z. d0 W3 Igetdir 获取当前目录) H) C+ @% ?% ^( x
    + P& s+ l1 w; }) t; t" h+ H
    chdir 改变当前路径
    2 c" a! D1 i7 _3 F. d
    + I, D3 \/ d- t+ V   + W( Z9 |  t3 R
    7 ^; ?. {/ P+ w. m; `
    cwd = os.getcwd()
    ( r8 y" l6 G% q
    , j  _! r8 w4 u. Wprint "1", cwd
    6 q' `% H" w- a; ~" k4 c
    2 G* U! _/ @3 U+ J$ D1 u# R# go down0 b% s2 p  r! B. G: m

    / Y+ u& q' r5 [os.chdir("c:\qtest")
    ! d* I2 ^" Z8 z$ c/ o9 d. v" W+ S# ~
    print "2", os.getcwd()/ C8 n* q( I% L) x
      b4 v8 q4 G: v$ a4 M1 }4 j: I! l2 p
    # go back up
    4 E1 H" `, q" R, g, n+ _% |
    ' F/ _- l% z# M3 L1 tos.chdir(os.pardir)#返回当前目录的父目录+ z) x" A" ^8 n5 W  S5 Y+ p: [
    5 O; U+ _/ m/ h/ B$ I1 {3 @4 l
    print "3", os.getcwd()
    & d: U# E7 T; L* a, K. z
    8 O+ E; p4 ]3 B7 U   
    4 C7 V% y7 V" H7 Z* w# F* e' s
    % Q4 [" A9 z" Jmakedirs removedirs 生成和删除目录; E) U# }8 K2 i. l+ z' A. i0 O7 J

    * y! T1 \; {  T! P3 x3 ^makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除* s# _9 R+ j; p; C
      R+ e3 s' r; Y4 F
       
    * Z1 ~3 O6 ?- e+ r( d; t' T/ @; {
    & Y7 N7 h3 l1 \3 f. k, d/ h' mimport os8 d3 O+ d1 B1 {3 r) s% a/ {7 h# ]- l
    1 D0 M% w, Z* n- s& \( H
    os.makedirs("c:\\test\\multiple\\levels")9 C) ]& G+ v0 g$ [$ Y
    + K! @1 e. M# ^, S* ^- O
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")5 B1 |8 s+ q& Y  A6 Z

    0 l+ S) H& c9 x# ?fp.write("inspector praline")
    " ]' d4 Z) J* M" J$ h+ T
    : V% W5 B1 K* I& xfp.close()
    ' h; r/ A9 N$ K* c, \# Y8 ^, n5 c3 `! o0 M. W1 O" g/ n7 k3 a
    # remove the file
    ) ~9 U, O  J/ x4 D1 ?$ N0 ^# C" {- x5 p/ @+ e' l4 t: }$ K
    os.remove("c:\\test\\multiple\\levels\\file.txt")1 [8 F1 V$ M( ?3 T

    ; B  Y1 b4 H4 K- K. j# and all empty directories above it
    # b4 n) _( c  X0 b3 X2 M$ `/ K! u7 R$ a0 Y
    os.removedirs("c:\\test\\multiple\\levels")4 R5 @9 K1 k- Q

    0 A2 U; Z! C; Y# r5 `/ W   
    ; H6 w. \" q3 r& m. P, \& P3 A2 Y' C4 {# Z# ^* V: m7 L7 q$ g7 _/ G
    mkdir 和 rmdir只能处理单级目录操作.' P7 u  S( B* I

    ; ]! x. P. V" }5 d( B3 W若要删除非空目录, 可使用 shutil模块中的rmtree函数$ T5 J8 T: j: ^7 y: x

    ' t. O/ t# B1 Z3 R, y: V   
    ) n0 x, h: u) W! C' j
    / ~) x% A- E( V" e7 d3 h) a1 d% k3. 文件属性的操作& q4 p" @2 Y3 R' X, M" H
    6 z/ @* I! h* t# O' i4 z0 b
    import os. Z. a+ Z* s2 m5 {4 @

    2 ?. d* {) `' I9 ^- q. Bimport time
    % B3 J% G  Q! Q! M$ E& u* d. G& X6 C7 d  C" ?
    file = 'c:\qtest\editor.pyc'
    & W% H" V, A6 [# E/ a7 Y* p5 \- i# Q9 N. P/ k
       
    4 `0 N' L. j2 E
    ) e% ]9 s; H$ O' lst = os.stat(file)& q9 c3 p. _8 k# Q$ j4 y5 n

    ! L9 l! B# b3 W1 rprint "state", file
    0 Z4 [3 |/ W6 r8 I3 J6 N/ ]# |9 `6 H
       + q/ N7 X: W+ r
    . D' r4 |* k/ R. M" H; b
    def dump(st):" w4 V6 b! e9 d4 x! V, T& ?
    ! d2 ?2 p0 R0 s% R& L
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st6 R) K5 [! E' A7 g1 y; R
    - b2 V- S, J/ x3 j* r* p
    print "- size:", size, "bytes"
    2 S, T& s) @; x+ N4 R% q9 e1 `& V* P
    print "- owner:", uid, gid) k. ?; l! B8 A

    5 _- J+ n& \. S. g# i  b7 A- fprint "- created:", time.ctime(ctime)" U( Q; F, W9 M. x
    : o1 \# e9 Q8 [2 a$ v7 x6 _
    print "- last accessed:", time.ctime(atime)9 R& J9 H  y/ w1 ]

    , ~7 X- Q) F0 p1 a& o# Y0 `) iprint "- last modified:", time.ctime(mtime)
    0 p: v- \# V- n' E5 D8 h3 V/ `& F3 q9 {- E. ~, E
    print "- mode:", oct(mode)& N. Z5 z6 m" W

    5 [% z  j2 s5 G, Yprint "- inode/dev:", ino, dev4 m2 _) w: h2 f- x; j# G" t4 b

    1 k$ o# r8 q# Q: W# B/ }2 w   ! c: E- J5 |8 j! b8 q

    $ @: x( P( G9 [; v0 p5 h9 Pprint dir(st)0 o4 P) `( v: @5 @& r

    . k; \2 [0 G1 K8 B6 w0 P: Xprint        1 J7 q7 w) V! t6 ?
    0 K4 D) w! V- B, ]+ o
    dump(st)
    4 c0 I% K" p, d5 Y' M: {! f
    0 d& c$ ]2 v8 \4 G6 e7 i# print
    & L' D2 a2 ]5 [9 f! z) h9 g/ e7 n; g# q3 t' z& ^7 y$ _+ X. [, q9 n
       
    ( M" z5 z  A# v2 T/ f2 C: g4 c
    7 s* j" Q( W$ ofp = open(file)
    # U, k4 J) V% x0 {
      r$ A2 A  x' jst = os.fstat(fp.fileno())7 v3 b* D" R3 Y' x

    : Z* Z3 I8 a% X! Y: @: _' d. mprint "fstat", file+ }# i( `, R, o8 t! \

    ! T" n1 {7 o% t) A1 k) m$ @dump(st): C" b+ E9 {# \6 d+ ]' l3 \

    * V9 N& k- c4 _5 z5 a( U3 J+ q   
    . ~8 Y1 ^9 i9 Q! f' c
    5 k9 F. j7 O$ A$ f7 [+ q; Bremark: 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):" l- R0 B: r+ ~, ~$ j7 w! d

    ! p% A! t# r+ _3 H! B0 f8 b. tos.fstat(path/file)1 Z( _" i5 R4 P( B  g" l, y

    / w2 x/ Y! W8 g" j# E. ^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
    " J& |0 ]5 |4 ]7 w! Y+ a% }可以放进文档当成附件下载的!
    , L. r# K1 L# m6 y( F- D6 k$ M7 g: `
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 05:43 , Processed in 0.459016 second(s), 63 queries .

    回顶部