QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3948|回复: 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
    / @1 x5 \0 w4 c1 r4 y
    + A( O+ w* k5 ]" u/ l. A4 l3 p
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作) Z1 f: w' g/ p. Z" y% J

    ; ?+ ]7 Y# N8 |; o3 H* }   
    % e# u9 f9 z6 H1 r0 \
    + U9 I' t) ^  b  l) ^3 P, \; K, t# M1.文件操作
    1 J+ G. ~5 A: I( m8 A% ^
    8 q8 k% c% G/ _build-in函数 open 实现文件创建, 打开, 修改文件的操作
    0 [# b% N' [  T
    : R: I3 X+ K( l$ h* K  l* C5 j ! I, t" q" H8 u" a
    5 @8 }7 H* B; n' s2 f, d
    import os! x+ c+ y4 [, B! Y5 N5 r' {" P% G8 M

      |+ u( F" E6 C/ {. B3 Aimport string
    3 a/ X' F# k+ n/ P
    ! |8 z! k0 Z+ e$ |/ c7 }( _   
    0 X+ W: g5 Z( O) S# E8 l: L# n# x1 l7 t: V/ O
    def replace(file, search_for, replace_with):
    : V8 h2 i) r! S6 x9 A. O" b/ |0 ~1 t9 Q
    # replace strings in a text file
    5 Q/ ^$ M* r9 h  K$ Q" I* y
    & x9 }$ p1 E' A9 ?* P   
    " n0 f+ |* v! R2 e7 U
    5 j$ A5 `( W1 O) }* R# kback = os.path.splitext(file)[0] + ".bak"2 o+ _5 l/ o3 u! h  Q
    0 G& @4 v) z, l' s! h
    temp = os.path.splitext(file)[0] + ".tmp"
    % b# U# A" k  `* W, E) e4 M% z6 K
       / a3 U7 t3 v) M$ ^/ R

    6 g5 N) r+ |5 x+ }: t9 h2 Etry:9 k; q1 y3 F( ?1 s! G- U
    $ p! Y0 w# S/ G" r+ r4 ^& p8 \. t5 F
    # remove old temp file, if any
    0 e5 n8 c5 V$ R
    5 \8 N& E. k* b, C% \) C5 J! xos.remove(temp)
      F$ j; U5 J" D4 {, R3 M% W6 q0 f% ]7 [) I) ?4 Y
    except os.error:
    - h7 E, O7 E6 N% ^  }4 k! k. v; X( u, W0 Y) ^  z% x% O
    pass/ x7 p' D, m5 X3 b
    1 E( s5 D+ e  m' K
       
    $ N: C+ o/ |* Q5 `- A5 u' v/ G- ]$ O/ l$ `4 C: P4 v5 W8 w
    fi = open(file) #9 V! F. D8 M" m# g( F

    1 Z0 t. A8 I2 F+ B! j8 t, Bfo = open(temp, "w")        #; h' Z1 P6 |; r6 ?5 A: I  O* R# q
    $ ~8 G( H# u# D. }  H
       % Z! d' X3 c5 d4 l& `

    ( C+ g9 I* d: ?" Q6 W' b6 G! Afor s in fi.readlines():
    6 b2 D" d9 f7 R/ ~: s
    + O8 C0 l2 V8 Ofo.write(string.replace(s, search_for, replace_with))
    : u3 b1 I) d# A4 i. p
    5 o8 E6 F; W8 ]   9 o  Z8 c5 |( F% ?& A. _& j8 c, N/ d
    7 {  h7 Y2 P" O9 g
    fi.close()
    3 G  \6 o9 ]4 Z% p5 }2 [0 [
    $ `) g' N" q' {1 Qfo.close()
    ; j  |( K, l& e3 m$ U1 V$ j
    ; r5 I- \0 t- w% v. s8 ^   
    ) A; v& p& I4 t+ n: [
      y9 p1 `4 s% w- Wtry:
    5 a3 V7 X$ X3 l  s0 ?
    - I* u2 j# D5 n5 r- O# remove old backup file, if any
    % q9 h# s9 O4 T0 A4 k0 w
    & o' Q& s. I# Aos.remove(back)* f! H0 V* t/ T8 U
    : e. h% s# Y& p. {3 h* H
    except os.error:
    5 G* D5 S# a8 m* T9 y+ x5 F/ _. ^- R) h+ ^6 D# C9 E% `
    pass2 |/ a% @1 U  [9 [; Z
    2 y1 P5 B  _+ ?  g1 T
       8 D% ?( m6 P" U3 d) }) `
    * t+ T% Z3 c" X, |$ ]5 v% v0 `& A
    # rename original to backup...
    8 c+ u- s8 e& q* S% w; A6 M6 y5 J5 q1 W6 K5 [
    os.rename(file, back)
    3 u1 q5 E$ k5 n! r6 Y! P& s0 ]3 T
       
    6 q8 F+ h' V' H& _5 u
    ' z+ [, R3 x0 d! H/ O7 C# ...and temporary to original
    ) A+ `1 b2 l3 n9 b. v  U  h% P" S; y: R+ [" \2 N' R, W1 B
    os.rename(temp, file)- W$ i7 Y8 P! R4 _$ c
    ' {# g; s/ L; u* N/ W
       
    / m8 ^4 f' K+ P8 z, ?+ ?7 l2 h- H) ~+ c; p/ f8 i" p  G2 ]  o  H- }
    # try it out!
    . ~$ Z( q3 t: I: f, C5 _7 x5 D  J% ~. ^& Y
       2 d( W4 q& W$ A; M9 E$ ?9 c* v

    ; u# c( K* \/ O7 ]( B" rfile = "c:\samples\sample.txt"
    $ P4 R& t5 v  l7 T6 D3 I$ U7 ]5 Z/ ~! E) }2 W
       
    : j, i% {+ {& f. d9 O+ \" _/ h. o+ ]
    " f# s0 G  i6 e$ n% t; q4 Yreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena+ H* [. \, g5 P5 B

    ; N6 Z% g) [  o" L3 }: mreplace(file, "tjena", "hello")
    % P1 Q$ z; y' B
    1 W+ U3 [* q& K& O+ T   
    : R$ O9 _- U4 A- u; d9 N; Q
      n! R1 D  i4 A, @2. 目录操作9 f  \+ E9 q7 {7 U0 c# c

    - f/ Q9 q9 t; Xos 模块包含了许多对目录操作的函数
    7 F' f6 Z1 w  p6 c: C0 P
    ! Z- B1 |/ \' `) P9 Qlistdir 函数返回给定目录下的所有文件(包括目录)! l1 ^% a# m8 J! V) ?

    . @8 J/ H/ ^' K5 M   
    % I1 p3 U3 Q$ H7 v; W$ {5 P3 G+ E  I
      I$ A  [4 j4 g( J2 oimport os
    . a! ~+ P; D& f/ X; X0 |( I% q' Q( K( j
    for file in os.listdir("c:\qtest"):9 _* I, Q/ l6 J, Y. p! D

    2 W& U! r. \1 jprint file
    6 z$ c  l1 }  z) U7 H* ~
    # V: H1 [/ t  X5 a" y) L   , T$ B% \8 H! T+ y
    # j4 k5 L$ I3 f8 i
    getdir 获取当前目录# T( K" I% n7 e, ?: f) C
    / h/ J% l1 a1 @2 |2 x
    chdir 改变当前路径8 N& T; V9 [6 T9 f

    + J/ \' L# z) H% E( l7 k1 q9 r   ' j* @; w' @% f, K: j" i, C1 V* v
    0 U7 T% C- p) S% D) p
    cwd = os.getcwd()7 O0 d0 \2 O$ E
    1 B8 V* j' h$ M3 B+ V
    print "1", cwd
    : L8 O1 R1 g( [6 ~1 X/ d" W# R' W9 k- O: K4 W7 \
    # go down1 R0 E8 @2 d* i1 w) B8 R* i

    7 s# i5 W% e' c+ aos.chdir("c:\qtest")
    ! D" |" M3 M$ \' l* |9 p: }1 E9 q. E1 |& t* z- A
    print "2", os.getcwd()
    , V/ r1 p/ m6 r
      D/ w( I8 d5 q# go back up
    " d+ q+ |! a1 p5 K  g! |7 ]+ [- k* W6 {8 a/ P( F* t
    os.chdir(os.pardir)#返回当前目录的父目录
    & I9 H: P, N& B8 @# ~8 A8 r+ k( _, K
    print "3", os.getcwd()
    ! n! y) V9 o! {& e" `" C! [
    ' y+ a) x+ ^3 x+ _1 p" R   
    - T9 s7 M, S7 ^9 c% ?  I1 F# y. d0 B5 O
    makedirs removedirs 生成和删除目录
    - T7 _( G( K( e0 x3 [$ W) n9 D" `! T. ^
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除/ @- {  e; {. m3 ^5 _

    . |( D: r8 S' }( S0 g2 S: [   
    / u* X8 f2 r! `) W" b- W- n0 [3 e. h$ ]- f$ P# _
    import os4 J$ N" m. b+ i

    ( H% s" {: J) Jos.makedirs("c:\\test\\multiple\\levels")
    2 L* L2 L) r& \6 V; A: O" q" x
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")/ c1 n* H" ^1 {+ e! L
    & N2 E7 E8 v9 @! ]+ i% M( }# F- A
    fp.write("inspector praline")
    , k* V2 k8 m6 k" w/ v7 ~' c/ s# S. A  v" }
    fp.close()
    . d' c9 z7 m) A  u) L* |; O# @6 _, Z7 Q6 A1 @8 k
    # remove the file; K0 e0 @5 i# a% t6 |) w4 y
    $ y7 R7 w  K3 P" h' n2 d( R
    os.remove("c:\\test\\multiple\\levels\\file.txt")1 z+ R8 q- @( c4 p1 X# k

    4 }8 G) j5 v5 g0 ~% Y4 D# and all empty directories above it2 x% \: R+ a' P; \. M+ p

    + ^  H! {8 E5 sos.removedirs("c:\\test\\multiple\\levels")
    7 }2 }1 P3 I' _6 Y2 z5 t
    ( y/ F. ]" O/ x$ i. q- i. D   - n' Y' Z8 J. t- X) @* X

    8 {. \; C& s( Emkdir 和 rmdir只能处理单级目录操作.
    ' D  G' [# Y6 i2 l4 J8 W& O$ l/ V6 \2 I$ n
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    " K8 v2 d' @. r4 ~, t) {! ?0 E2 _" O  o% T8 h
       
    " [8 h) U' e( n4 y! f6 @7 c6 R  E
    3. 文件属性的操作
    & w7 G# R3 v* X" U/ k* ^: I, p
    % k4 p8 V1 ~- _; M: q/ eimport os% D' r1 P( ~6 |, D, C

    9 S. y$ A! A3 g, b; Aimport time! O0 ~6 b4 U% J2 I* v

    1 S/ R0 j: [2 c* P  e; Lfile = 'c:\qtest\editor.pyc'
    - I, B9 x* ]% i7 e! J. t- e4 h2 y1 T* l/ S5 K) f3 r0 I! E* C
       6 p* m# p( `& [! E

    ! h8 u5 F( x! h" cst = os.stat(file)
    $ N- V# B: _6 C% \3 N
    0 N! q6 T; L/ p" Z  w% C; U( Hprint "state", file
    ; R- I( M5 @2 q4 N4 @. r( N
    9 G) r5 o/ E4 m+ w. w   
    * a2 r+ ~* C5 Y
    * a$ N+ O. Y6 {$ Q, `( S- bdef dump(st):
    0 o# V/ F) @( ?. B# ^2 v7 }6 ^% o+ M6 h* d* l" [
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    & @) {, O: X& f7 p- S+ l1 D; Y# @( o2 z6 G8 A- O8 [/ B+ Y
    print "- size:", size, "bytes"
      n& U' V5 u5 R6 v' z
    ) {; O3 y- u6 ]0 K1 h* w  P: w3 o# gprint "- owner:", uid, gid
    - M  p) ?6 ]6 i% B  M" Q1 [
    8 f. D8 q! B( N/ q* O) T& ?print "- created:", time.ctime(ctime)
    3 F) e6 a9 E! g' L% p$ s5 i8 {* A( Z8 n2 F  [/ D
    print "- last accessed:", time.ctime(atime); p3 H% U7 @7 T" J8 R1 V7 H2 U

    + K" _- }: M$ p) b1 {* ]! rprint "- last modified:", time.ctime(mtime)) @+ _* B" V/ M7 I* g$ v
    + y3 _. |: i# R* E2 ?/ l9 V9 y! a
    print "- mode:", oct(mode)
    7 j2 Z/ i# ~8 W1 R6 I) |9 N: }' y/ V
    print "- inode/dev:", ino, dev
    % o% \4 r$ j/ S4 u! D  ~- G0 Q: A$ E
       
    9 W8 l; w9 A: v) a
    % a( e' p, f7 Gprint dir(st)+ c2 y1 L) t  L- O3 D0 T

    + p9 a) h0 r) e) s- E3 w; fprint        : A/ D; @) o+ F
    / @5 E/ ]5 O- l, l, q
    dump(st)' Y% [( n7 W9 y: m2 w/ r
    : n( L$ A* f2 r  U7 I( j
    # print
    " ]. J, S/ e  Y, ^! ?$ i
    5 |  d3 R8 h% G: l' E   $ q8 G2 w7 K' ~' b+ o

    , b0 I' }2 p7 [: ]9 I# ofp = open(file)
    1 [( _; H  f. A, d3 t! P1 b* N5 B; G) }  ~0 L( l( Y( O% \, K
    st = os.fstat(fp.fileno()): \, `' Z8 A8 _! Z0 M6 L

    2 ^3 `4 p" C; }* k2 }print "fstat", file
    . J) ^& M  ?7 a, H" o2 c1 p
    - D+ Y! |) G) `4 V0 Bdump(st)
    9 e, o0 |. A, @. a% c. l  H* O: t1 T/ G) }
       
    6 q  S0 Q, m9 Y) x
    ( Z- F; K+ L% y6 a* M% V1 A+ u* c3 aremark: 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):
    4 e  H8 V( w7 k3 r3 J/ V; j. O  B, x
    os.fstat(path/file)
    ; O  _1 F2 T- Q# ^5 `/ m" S/ ?' L9 `! i" u3 N3 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
    0 K+ W6 w+ O) l6 S& r/ g4 q可以放进文档当成附件下载的!

    : j1 k2 ^& U/ w& ]很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 04:45 , Processed in 0.295095 second(s), 64 queries .

    回顶部