QQ登录

只需要一步,快速开始

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

    6 Q: o1 [4 V: e! r" b0 O& J" p3 z! ]! K8 ?) `+ G$ }; p
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    5 z$ m# z2 e1 B* l0 ~2 t7 W
    0 o! b6 n/ ]6 y& F: j# `* m   
    7 N0 O/ P# Y+ i0 B7 y( C4 x1 g' J5 w9 f- b) @/ T
    1.文件操作4 g& y; T" Y: W1 L

    3 F3 _5 e" T9 {$ @+ B# K( j9 Dbuild-in函数 open 实现文件创建, 打开, 修改文件的操作- P0 E- f% g5 F3 F; P. e- Q

    ) d% p/ m/ Q! N  t1 s ! s! k" ~6 Q& F- l  k

    # |- a  X& o  y  _6 v" E' m$ |# limport os+ a9 _$ i4 X+ n

    ( q" O% b( ]1 f. g5 I) y; @import string1 U; B) |* ^  G9 ]0 F- E
    . ~$ V4 R9 }! ~! f/ _
       
    6 t; c9 F) U' n6 d4 M0 Y# c0 L2 Z  T6 L0 t, S! n" x% a
    def replace(file, search_for, replace_with):% F# `. d# ~2 D" l' }9 X
    ! \) g3 t) ^0 \. o
    # replace strings in a text file6 D& ^8 r' x. j* D% R% L+ r

    & T# D6 g. v' q$ g' z4 b; E; C   ! e" d9 b5 e/ x% }! r
    / G% l. m" [% H: b+ E
    back = os.path.splitext(file)[0] + ".bak"
    5 b5 D2 b$ \2 q! K, O  j5 l' I  y$ B) r+ `* D% J6 Z. g  }
    temp = os.path.splitext(file)[0] + ".tmp"2 K! B* _" Z! t: M( M
    $ V7 N5 M3 K* F/ ~+ a. q2 T
       
    ; F* I2 Y; p7 f. u* F4 i/ i. ~: |2 d2 O/ ?5 E
    try:
    ; v( s& |8 O, V
    4 T, c% q1 n: h- A8 I/ S2 c+ e# remove old temp file, if any0 J( e# e$ F. I1 G" z, O

    ; p+ e- O9 M4 R4 L  F) Nos.remove(temp)
    / v% ~  Q  F' y  ~) G" _/ I6 A
    : |; [2 B- }* x/ Cexcept os.error:
    & [7 e1 ^6 m7 G9 Q, \; \- O5 l3 h5 w6 x! g# N
    pass
    & T6 ?. v/ f) }* `& L3 @
    / K9 i% |5 s7 ?* @) I7 }  A7 z   + w9 R3 `& R, Z
    # p0 t5 Q$ g' M& B, W
    fi = open(file) #7 a# a, T8 f1 W- c  E) {5 {, a
    . l/ L3 t0 E1 X; t& Q3 z& d
    fo = open(temp, "w")        ## ~) t5 Y( |6 W, m  F' N
    * H& S% M, T7 |" V! \
       
    , W9 b% d" X% D9 i5 w/ O9 Y9 _7 I" O8 }5 R: o
    for s in fi.readlines():9 r' O# @7 ^, P' G# h

    ; c! k1 O* s/ Ffo.write(string.replace(s, search_for, replace_with)); l5 ]) N) f0 @! w1 C; y
    * y, \1 [* u# a( b# w* U
       3 ~% g9 H9 g& z& l1 p8 S, P
    % n, H. g2 t* P; r6 s8 @* `  ?
    fi.close()
    # z/ g8 U2 z; Q& }8 X" |* E1 C) t$ q# P
    fo.close()/ M8 A, O( e( z' {2 P

    ( G, e8 s) t: ?! D, j   7 M& f2 }  x/ L, @6 d% I; Y- p
    & j" W! \* A2 D+ K
    try:# z9 U" E# T7 ?8 r' ]' x% y

    7 U4 |( e1 e( p3 v# remove old backup file, if any
    6 F) }* @: X( F/ ]; S( U* o- E) U! j& p  O# Q5 d0 x0 G7 @
    os.remove(back)
    * W' n0 z7 [$ Q6 @2 j: p0 \5 u- L4 c, J, K3 f8 D
    except os.error:
    ; d0 `* g9 j' z9 G6 F  k" P9 b
    1 i0 ]( [/ _- y# dpass1 C$ v1 W/ @3 ^" F

    , w; r: ~" g  m7 _% L   5 I0 S4 b" {0 m

    + K, G) h% J7 l9 k5 C7 m3 x# rename original to backup...( C) k. `1 Q' M0 E# p) z, a0 L2 Q! X
    4 l) ~- ~$ E" o9 N5 _
    os.rename(file, back)
    ( p! S- s3 B: ]  j7 G2 x' V) @% o/ i5 X& f, K1 O
       ' m4 \: s3 G$ `
    ! r( A, D. v6 m7 _* H
    # ...and temporary to original
    " J5 `, }+ A' d, N9 a- B  j' w, V
    9 t7 a8 i! m/ K' `+ ]3 xos.rename(temp, file)' D* K& g2 M+ v; m& r: ~; i
      `* A' A) a2 {# z
       ; S# k# l. Q0 i7 y5 D5 R2 j) t
    + a7 Z- t6 u0 u9 R' d
    # try it out!, v* H" n, o: Y2 I1 K" i# T

    : ~7 F& X3 j' x2 H9 e   ) ^% J& ^$ B, b% Q, ~

    $ R! h5 d: q1 V5 Z  Z# bfile = "c:\samples\sample.txt"0 H' K1 H% I. n" v5 o
    ' [6 p4 H1 t  Z/ E8 [; X$ a$ _& e3 P
       
    2 ?! K; z0 J5 q. h- V0 v2 `9 W  i( N/ z$ R8 T6 B& G
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena5 S0 C* E1 B4 O; {6 h; z
    % {) b! [6 R# n' w" ]
    replace(file, "tjena", "hello")( c, c( F. Q8 s) o, f4 {

    / ?* }$ i6 W5 I3 v; r) S     ], K' N; T0 H) p% `# M
    % m1 `5 y6 p9 u1 Y. ~' Z5 g3 g0 V+ n
    2. 目录操作0 I! N+ o+ ?1 _0 [0 o6 Z* ~

    ) k% S  p- p* a2 @' Sos 模块包含了许多对目录操作的函数2 f2 B" M* ^, O# A% Z% \
    , x/ M; [# g% n  G
    listdir 函数返回给定目录下的所有文件(包括目录); o4 O, d& V3 M' P* \6 \( i  E

    ( z7 m: z% l* o5 C" O   
    - |9 c7 N4 y. }3 D/ m# R
    2 A8 J# [) W: M8 [; Ximport os
    / ^6 O3 l5 M/ L% i: f+ H
    : J2 m9 ~! Y  {, d- r5 _8 R7 k- f* ifor file in os.listdir("c:\qtest"):
    5 m  x2 L4 K6 h2 t" g# j2 I6 e/ P, r* v+ ]8 N5 q
    print file' }# j7 Q- p) g

    / o4 U8 l9 K6 c2 H; O   
    1 n3 S! b1 e4 y$ m( Z) s- W1 K/ }, n3 ?0 S! S
    getdir 获取当前目录1 ]3 K5 b9 o& N) `$ ?4 w- h' ?6 I
    3 |8 N% B7 l% W
    chdir 改变当前路径
    4 z, Z9 V7 x+ W" r- _) C* w7 a# A( v; U' C- |
       : L8 c' ~$ E/ k5 G

    & N6 f2 E  B, S' @- ycwd = os.getcwd()
    0 T: y8 V( o5 s* }5 e/ ]: s1 g, J- T: K: V+ I: V, g' t8 `  n
    print "1", cwd
    2 d$ M3 i: `% D4 D
    , `1 O4 u4 @- D% ]. F# go down+ d/ a. J" s+ t
    ' }6 r: o5 f* Z8 v
    os.chdir("c:\qtest")3 Z1 \7 x) v' }4 O* F% I

    3 [- R: I" d+ m# }2 A1 }: z- Wprint "2", os.getcwd()% i$ \" I0 I) h& W" ^. j

    5 ^  F3 j4 `9 B. ~! o# go back up6 K" N! Y* l7 Y( x3 d' Y
    0 y' [+ G* D, K' ?0 t3 M
    os.chdir(os.pardir)#返回当前目录的父目录  H" e& G* x4 J5 ?8 F1 L. _9 ^

    . [2 L( N3 T) _6 n: hprint "3", os.getcwd()) ]5 h' T* W9 W! m  ~2 B. E0 ^& S) n

    , Y) t: i* j% S1 R; k   
    - W1 J0 u- u% \, s# q# y( Z' I
    " z% m  h% S. S4 L3 {. q  nmakedirs removedirs 生成和删除目录
    0 ~3 E' h4 I1 g9 B4 ?+ e# E* j& ^# A$ X- [! H* _9 K
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除$ ?  Z& B2 g9 {% F: m! i( I" P

    3 U7 g8 @) `' u$ a, \/ C   
    , @! r7 }2 w! S# Z) l% Z+ P7 L! m0 {  D! A- _3 W. Q' r6 m2 W2 r
    import os1 B# |9 y0 A& \7 t8 m
    : _  |3 l* z5 I; B2 z8 J
    os.makedirs("c:\\test\\multiple\\levels")
    5 ]# y; y' A8 A! `
    3 s. v) {8 o' Nfp = open("c:\\test\\multiple\\levels\\file.txt", "w")& ]9 {$ I! m' E% W" x5 G
    " {7 u) |1 _6 o: v
    fp.write("inspector praline")
    ) f, n& @! c; s7 f( n  x0 O9 C* n/ }' l; a; O1 D2 o
    fp.close()2 Z8 m! `5 E0 `- U6 v

    ( y& ?6 V7 F' G7 D( e8 S2 C# remove the file5 q" [1 O! [! i- ?8 p! X0 v/ k

    . ?9 \! L+ Q. o$ `os.remove("c:\\test\\multiple\\levels\\file.txt")+ j' X, H  i' I6 w( W/ k/ d

    1 U( V- J. m9 A# and all empty directories above it
    - K" q- x$ F# m# f' \( ?' x+ b, ?+ Y& H0 T
    os.removedirs("c:\\test\\multiple\\levels")
    / b* B2 y% N6 h  n7 I8 e
      O2 {/ D$ Z; ?   
    ! j- W$ v2 U# d
    & I6 H8 C( v7 t2 Wmkdir 和 rmdir只能处理单级目录操作.
    " }7 W2 C+ N" y# V+ J" b  p) f2 p7 ]. X; `0 U. a
    若要删除非空目录, 可使用 shutil模块中的rmtree函数* O4 ]) H% O% @% ^5 |4 P

    ; J$ i5 W/ q% f6 K9 [% u$ Z- W   
    - p7 z! d2 ^) @1 P" Z
    2 I: d8 U# t; O8 ?- ?( d. H( Y3. 文件属性的操作
      C+ r/ X2 g* K8 S1 L$ o% _5 d7 }* L* C
    import os+ p7 M; y3 r8 L9 R4 R
    0 S5 o- r- Z. y
    import time
    # i# d8 M8 u  y7 m- U
    7 R0 Y( f) _. K' Sfile = 'c:\qtest\editor.pyc'
    # V5 S3 ^$ z, B% z2 h; i* O4 l$ e) y9 h# O
       
    + ], k& x2 Y$ ]0 s  R7 P; d6 {- q# }' L3 M! }; Q3 J8 {
    st = os.stat(file)& M6 i$ k9 B4 K0 i

    $ D0 T$ K4 P, q! oprint "state", file. }+ z4 j) T4 O  m) N0 E
    ) |  r  H! N; H/ {" Q
       2 K' U) A) U: R( Z
    & v' _6 w3 @& m
    def dump(st):
    6 y, o' `! T2 \  t7 j  w
    * ]7 [, V% v( v+ F* s' S8 Q- Hmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st" q- B4 S+ I4 L4 Z. V
    : Y& [+ X" [- P. t) h! F
    print "- size:", size, "bytes"9 u2 W7 v4 {4 u% {

    / t. j0 V8 A  V9 Z2 ^1 O+ v5 oprint "- owner:", uid, gid
    5 m& Z, w5 _2 E  Y
    7 R) s4 |. w3 Z! @print "- created:", time.ctime(ctime)0 @* T' c  z/ l, H3 \, @6 ]6 V
    / X; g6 Q/ w5 _; f, y
    print "- last accessed:", time.ctime(atime)  n# G: r3 ?1 }  K! M% k
    $ |/ I/ K% N. h0 v& Y* Q2 l
    print "- last modified:", time.ctime(mtime)+ b# g7 k- q! O4 F& y+ V/ l+ N7 M3 A
    * G* X) t. h8 z+ ~# X( h
    print "- mode:", oct(mode); R+ d2 b9 L  |% G8 Y. _, `

    / J8 B! I- T. A# L/ `3 lprint "- inode/dev:", ino, dev! [0 S% R9 V5 N. k% X
    / b0 G2 v$ O, g6 n9 X
       ; A; v9 ^% |& r
    ! [( h$ r) p9 y7 S+ g' o# }
    print dir(st)8 j2 [0 a7 _" {0 M; V
    9 w5 c6 e9 G9 j& P0 ?5 u
    print        
    3 }, }( [# d5 e4 i  P: \: i3 g' W# B
    dump(st)
    ( F2 s9 b. [0 ~, `) }6 ~
    ! _* b8 v- U1 G6 K4 F& t$ F# print
    - t) A( H$ S3 m3 ~9 ]2 {3 `% U
    : X0 |: V8 R( ]0 ^- q   ( Q! w2 b! Q/ {

    & U) E- P# I: q1 g2 _fp = open(file)$ y: n7 X- c; ~6 @3 l! R

    6 H. Z$ s4 P0 {; Y/ Bst = os.fstat(fp.fileno())
    & t& U) u( l* f: v  j8 h1 Y4 [5 E
    6 u# \5 U' w* ]# Nprint "fstat", file& r- v( D2 h* j% ~
    $ W. B1 `, V% u$ l: f6 }7 }  I
    dump(st)
    6 w( [* `- x. [5 C% F7 U. y# l6 F' k3 e' Z
         y1 R: h3 \7 {- x7 |1 O6 E9 w
    ( q5 O( p: t' o9 W# A+ h" J6 Q
    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):% D& h  m. F/ g  P, O& U
    & ?. `" n# Q7 }# o
    os.fstat(path/file)8 E: u' R$ l$ N( z8 A
    ! K0 a' y! b8 P. h. A/ x
    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 8 }+ }0 ~0 g# E6 A) t; f# d: k
    可以放进文档当成附件下载的!
    & o6 V' E4 x+ R. P# X# F, J3 I" E
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-11 18:37 , Processed in 0.445896 second(s), 67 queries .

    回顶部