QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3882|回复: 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
    9 W  z. o) t% t4 c
    2 E9 H% m0 X6 h5 F2 F" _
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    : Z! }2 s4 @7 t9 @6 u  n, i
    - X5 C+ V& L6 n   
      W, Z, K  ]+ X/ E! ?$ F
    . D2 h) ^# Y3 `9 d5 u1.文件操作; l5 C/ F  F* t- l% l
    ; m; Y4 K: K& |' B+ g6 n
    build-in函数 open 实现文件创建, 打开, 修改文件的操作4 `+ ~& P+ P/ n- @3 _3 T& `
    0 g$ X7 D1 }0 b; k) h8 w/ k
    ( m/ l' V- z, r$ s

    & ]; c# p/ ]1 i% C# M$ iimport os* U0 u8 x, r5 f. q2 _8 }

    $ y; x& w' k% q/ B* Iimport string2 }$ o' [2 _* P9 U4 ]/ a5 M
    8 c# W. X) ~8 e$ C4 B
       
    ) {" B6 n; h4 t( A2 f  o4 R8 B; u! N' a* K1 h1 |" q
    def replace(file, search_for, replace_with):
      F! _) @. X% a0 G3 z+ W1 a3 k
    : F9 H& w" i  ^+ }7 u9 Y; ?# replace strings in a text file( o6 |' O* r+ {5 o( ?

    ; |9 z/ Z) _! p5 \6 R, t3 s   
    / ^1 {" D. s9 f& u2 W
    # _% C  u7 Q+ g* }5 \! a* l2 y' Bback = os.path.splitext(file)[0] + ".bak"
    ( p6 K7 N7 p5 n1 s+ K) o6 Q2 Q+ D! v% r1 G0 w, J
    temp = os.path.splitext(file)[0] + ".tmp"
    1 g. u, B1 Q  [6 X! [  `
    0 t! t* i* n1 n  N: ], P7 A   
    . j! K& n- p+ }4 T% }/ M8 h7 C4 Y, a2 I1 p
    try:
    0 `- Y: |# C3 K) Y* Z5 D
    0 T3 f5 K& Q: Z: c/ L# c$ g; R# remove old temp file, if any
    7 w: H8 C* n: f
    6 O: p) r3 E8 |( M; w2 Jos.remove(temp); |' f  P9 x4 n6 z
    9 A. ~& M0 ^+ l4 k
    except os.error:
      @  b$ z# a9 D! [: n/ M4 U/ [1 B/ Q
    3 q& F! s0 R, i9 b. opass
    , N! T2 K0 p+ k; c" w2 l/ s7 p/ z1 P0 t2 ~- H; Y
       
    / h: D0 w, t% ^
    5 u+ L4 T3 e: F7 Z/ l6 K8 [fi = open(file) #: z5 H+ O/ u) ?. O: T

    : f1 m- s4 {% z) e0 k8 n  ]fo = open(temp, "w")        #0 S( q% }5 c/ e* @5 c4 d
    3 [; C0 K( d5 r4 D1 {' ~
         Y! S. Y8 Z! Q" v, g4 y: q
      j4 I3 F$ n1 k( e
    for s in fi.readlines():9 p& g8 d5 Q" t" ^% p. e8 d
    9 e9 a1 e+ X& W4 U0 H5 b
    fo.write(string.replace(s, search_for, replace_with))
    % U( _& Q, F. R' ?* i: U: O/ P7 c- T9 l4 Z' s1 k3 e, f  n
       & Z" Q/ @+ ~6 e
    * n+ y9 ^) A2 g8 t
    fi.close()
    0 G' w- V) l$ O# m- U+ V" \
    2 B$ d& ?: o' X: e1 V" B! Xfo.close()
    4 {9 r- {$ }/ U& H
    7 _3 `, \1 l8 z8 g' S   
    $ j9 v2 ?( j7 Y% E) M# c: f+ |" B6 T% k5 N; c
    try:
    6 N+ E' g& ~) m. q
    / K' u. A1 D, [2 |6 H. P. g# remove old backup file, if any( L% [1 y* `3 ]1 X( H2 c' P

    0 c9 }, ~; h' w1 i* I+ `os.remove(back)0 v/ g# F' @& h7 }; g
    ! [3 x0 L) _+ H7 H
    except os.error:! r' i- [% b* ^

    2 Q7 G! A* M& `6 v. Q& kpass
    0 ~) L8 w" {' [7 \+ D8 {) A! i$ L6 n+ l  A3 s6 x
       
    * ]2 u8 P3 Z/ i" C* ?5 ]
      n# k# ~; ^' F# rename original to backup...
    8 G; i. A  T* o6 Z- y5 b+ z
    * R* |# d. J+ ~! gos.rename(file, back)/ f) G; y& x+ R8 {( q

    4 k$ q" n- M* W3 c$ f   8 a' @: S: {8 h/ }. X2 o3 u7 v1 k
    , k3 }: w/ M, m* |5 Y
    # ...and temporary to original
      ^- n/ G9 d" A% G$ C/ x$ n" R! F5 p$ Y" I9 P7 Q) L+ Y. a
    os.rename(temp, file)
    * T0 U* c: l) ?) L/ z
    " a+ {: C% k  w   7 c* ?* E) R+ ]  Y2 G2 ~$ }5 i) k2 x

    # P% L  I% k3 x: S2 y# ]# try it out!
    ) o3 P1 F( o/ P% x" z* C9 A6 ]4 e8 A8 P, d
       
    6 Y2 b- n- F9 Z% Y
    + K/ F/ j$ w7 p; }/ Ofile = "c:\samples\sample.txt"
    0 f5 X2 p. N9 r) L5 a# |' n' X' l; _+ z8 W( t9 o0 U. t; `. k
       
    2 K1 d# I4 e( g
    0 L# M: Z- M) J3 yreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena* _" }( z: d' q
    ) p' h! B: W) {6 E
    replace(file, "tjena", "hello")4 \' I) v8 A1 X1 v5 ?
    ! D4 l0 ]( k3 n5 T& b' ]1 E7 ~
       
    1 `& ~, ?8 J) ]9 I2 m; N4 H5 y) X+ J7 n/ f
    2. 目录操作5 ]2 K: d$ L! Y) Z, W! H9 q# I% @
    # s' o; ~2 O) @2 D0 r/ v
    os 模块包含了许多对目录操作的函数
      l# E7 E5 O( v2 C! \6 A( e; F1 s8 [1 o$ M' A
    listdir 函数返回给定目录下的所有文件(包括目录)
    ( t2 V* A6 k  U$ W! B) b8 {& n; ^8 {5 n- E. w
       
    4 |- ~& P; @9 {2 E1 |  C
    4 S) z2 B3 R. @" `7 j+ D" qimport os9 H# Q- j. x+ w0 M6 m9 Q6 D

    % L; B1 Z" t, |for file in os.listdir("c:\qtest"):
    ( ~1 }4 j: _( R0 B( d* @9 ~
    5 R/ b2 p9 P7 A. Dprint file! L8 x! h% g: L) Y9 E: h5 h) q! W
    ' A0 d/ f) }8 `( ^0 ~5 }, ?
       
    , s  p7 ~/ E- T/ a! g5 V) x% Y" V) |6 I
    getdir 获取当前目录
    3 }$ ]9 e. o; b1 |
    % h! _! F4 ]( Y1 ?2 s7 ^! u' u* ~chdir 改变当前路径' q: i& R) u2 V& X% L5 c$ c
    ) E+ X$ e2 u9 a% w
       
    ' [- N* B) z- C7 z4 C8 o  I5 q, e& h0 P$ Q/ A
    cwd = os.getcwd()5 Q' y  G$ c5 `  k) I

    ) V  g/ }( Z$ }' D' q& @: e  i8 tprint "1", cwd
    - a7 `% k: }& }# o( J
    8 k& E. d' ]7 }- }# go down( i2 I$ C; L3 ~$ Q- N! `4 \

    + Y3 h- R* R0 @$ B, s0 qos.chdir("c:\qtest"); _5 o' X. s/ t7 D3 [- l1 b* N9 E

    8 u* v+ k3 n, A' e8 @" Wprint "2", os.getcwd()+ O9 Y9 q0 ^/ _. q

    " A6 ?" m( u9 E) c/ J5 ?, F6 F# go back up" b$ l) l3 J6 D6 q, I+ H. k8 C

    " V" |2 L8 M9 K( O% uos.chdir(os.pardir)#返回当前目录的父目录
    ! e$ @7 t+ K1 {! d& e: G8 x! Y9 \9 h0 \$ J) Q4 [$ p
    print "3", os.getcwd()
    ' [/ Y  L. `1 I7 S/ r+ {: a
    5 q% ^" {7 c, h( ^! c   
    : {" D5 g2 n) \% |9 ?. n2 X
    9 J1 S4 d1 \- u; l( ~8 mmakedirs removedirs 生成和删除目录  ~+ ~" Y$ h5 o9 @. y9 C' B

    # e2 Z) p8 v# |1 L* `makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    7 A  ?: `5 ^! d; R) H" [6 W5 D1 K9 d
       * i' l# p# m6 w) ?  s: ]: M( r
    6 V$ A8 [) r4 a& v! D
    import os
    4 q3 H  ~+ ?1 U. V: d
    6 Y) i! t5 k: \! d* i7 }$ Jos.makedirs("c:\\test\\multiple\\levels")
    3 w% ~. q; E: {' `. s; A8 g+ _! j1 m/ ]7 F9 P- |( \$ D+ U
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w"). `1 u: C' h" t; L" e; B/ h( A
    3 J8 x7 [2 H2 v. Y
    fp.write("inspector praline")
    ) l1 s' ]3 ~; I* N1 I
      m4 c* ^) g- Z2 Y8 ]fp.close()" o9 z/ J3 a- S: D8 S3 {
    : L; {  V/ _  F5 X+ i
    # remove the file1 P# r1 v0 s) ^( Q; F1 G( |  }. W

    : _0 {5 a  @1 E4 T7 V7 Vos.remove("c:\\test\\multiple\\levels\\file.txt")
    + b5 D$ }: `8 {# H* J( x
    ! L& Y: w% Z2 e/ z8 h) _. @& s# and all empty directories above it3 \0 x9 h0 c: j) y" I, R

    1 Q* l& @9 t0 T7 ]$ Ros.removedirs("c:\\test\\multiple\\levels")
    7 m* s! P" ], u- O# s
    4 x+ y8 x$ \8 o) I3 y   0 H3 W2 Z. ^, s

    0 J( f, s5 u  t; s5 gmkdir 和 rmdir只能处理单级目录操作.  U7 f! z0 U2 n

    7 c! g% U+ _; C% J若要删除非空目录, 可使用 shutil模块中的rmtree函数1 }4 y! X- {: H
    5 B' M  z2 n$ J# n* c& K
       
    1 h2 _/ z5 [7 Q- r
    3 ]6 J' @+ k, F5 |3. 文件属性的操作
    " h7 E* n/ g! o* I2 o. [1 d5 m, s( ~
    9 ^9 R* O/ ~, ^3 g8 a6 Qimport os* O' `5 e1 @: l: o; |3 _+ u

    2 X, ]0 r" K+ c! V) simport time, z9 {9 A. N0 d0 b/ Z+ c

    6 m6 E- m1 a. V/ G, }file = 'c:\qtest\editor.pyc': v# l: l% ]* H; j4 P
    & p, n( e; [" N2 N) n$ a7 c
       
    2 W/ J. `0 A4 F. @: `/ O, V+ z: Z3 G" s, L8 r
    st = os.stat(file)
    0 h7 k& K7 c. z. k/ P5 g/ y7 E0 K0 q0 |2 B
    print "state", file
      @9 k+ H  N) }0 X: |; B/ y9 O  K) T$ k4 Z% Q+ Y4 P, K
       
    ) ]8 n; B4 z  s! w
    * W: d% i. b" ^: L# X5 ~8 Ddef dump(st):
    & c% v6 \6 f+ D5 f* [$ r) F# N: V
    " B1 [6 [. d: o  Umode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    1 j. l' }! D3 X
    & Z0 I9 Z! [5 Z5 v9 D* X2 |. Mprint "- size:", size, "bytes"
    " Q" \3 ~4 c3 D- T0 N1 S- W( _) }: c: I3 P* F+ N2 D- I
    print "- owner:", uid, gid. E; [/ @+ g2 v0 _+ D! I8 ]2 L

    ! M! a5 ]/ p- i3 q0 c' F) tprint "- created:", time.ctime(ctime)
    + b. u; E5 c3 @6 N! s2 C/ [' \+ {9 Z9 R- f' w2 }( n: V4 s" Z1 L7 U
    print "- last accessed:", time.ctime(atime)
    ' r' N9 t, U! j4 y  x5 ]: J: P" @
    print "- last modified:", time.ctime(mtime)+ }* h& J% ]; ?7 r
    : I+ c2 O0 s4 _9 |
    print "- mode:", oct(mode)
    / G% D5 m- ~; T5 b- s- V2 ~
    : n1 k6 |  C" q: U% Y8 hprint "- inode/dev:", ino, dev
    : P2 ^0 l: K( e1 v( O7 i) f1 n" p5 R: k7 }" D1 R; P# L
       
    8 }0 j% {$ v) _
    : }" Y0 n+ a: f4 |) ?print dir(st)& l0 F, m' W# G
    6 J; B: ]/ A/ x! |: y
    print        
    ; S6 K: B/ W: d% d& v' S; D
    5 ?5 o0 x* r, r+ l! _, ?% bdump(st)% |" G& w* s# G9 w+ a
    + _7 d/ w, y0 J) p: A  m* c. z% w
    # print
    0 X0 Q+ U% U4 {
    # ~) J+ b- j. Q3 V   6 Y- o" w  j* M

    ( `5 S. ]" [. ^! I- O' @* bfp = open(file)
    7 G7 W6 ^0 c2 D( t; P$ t1 a9 P  V& I; u4 B/ q
    st = os.fstat(fp.fileno())
    ! G) E7 d4 ?, Y4 D- S% J# D& C! J- P& _' c! l5 a! x  G7 I$ {8 J) j
    print "fstat", file: ]: ?; v3 M' T: k) @$ R% d9 p5 B. F

    ( Q. l! ~8 z" ?" m* s. Idump(st)
    5 C0 B/ n. r* l* y( K& i6 L
    6 U6 F' a3 I0 ?7 q" e   
    0 U; m( [* F* [8 \
    + i8 H$ U+ u: dremark: 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):( p9 ]5 R  }4 o" q' s3 w$ O

    ) f) M8 t2 Y6 Z9 |5 sos.fstat(path/file)2 t) z; S( _+ [3 A* a

    4 Q* |; f7 S7 w4 a+ ZReturn 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 * C, ], m& P, g7 [# \6 R
    可以放进文档当成附件下载的!

    . }; D, Y2 q1 B9 `8 o' [- H9 Q+ k: \很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-5 15:22 , Processed in 0.487359 second(s), 64 queries .

    回顶部