QQ登录

只需要一步,快速开始

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

    3 X( j) x1 ]% B1 N  F/ Y2 e
    6 Y/ ?& p; M, y- Z, @5 T; F" Zos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    # U* m0 g1 Y2 K+ e+ H
    5 w3 g) d) x6 @1 I* _2 m3 u1 G9 y   
    / `: a0 A# F0 T' J" c  ^- P# h* `& m
    1.文件操作
    0 n9 f8 x7 H% W( ~2 B' ]
    0 q" {: z% c% j7 Lbuild-in函数 open 实现文件创建, 打开, 修改文件的操作
    7 w; z. ^6 d8 X# J& b9 ?
    2 [4 a/ f/ ?2 w9 z: h! }' c. o
    ' o, ~" O' H4 N/ M8 C6 A0 [6 {
    ! M) q$ b! U, V3 Oimport os
      }# w$ s% N0 {$ F4 V
    1 H$ ^9 w! N7 G* u% L! p7 [import string
    ' {4 `7 k# k# W! o8 P7 P
    7 i4 x# D0 D% l; W, V8 [   5 G! c4 n9 @/ |% C

    ! D: a" u3 H4 m  Udef replace(file, search_for, replace_with):( j8 w: S: ]1 {  d
    1 y% y* s9 b. n8 b
    # replace strings in a text file
    4 |. W0 W6 k& u( C! c- P. I4 @$ P3 M( ~! s/ O# s7 [5 t
       * S; i/ x6 B) J+ O

    # r! u3 n$ m/ Tback = os.path.splitext(file)[0] + ".bak"9 T! r, g' \: _9 j0 F+ c
    . F* h0 t0 j" H; s$ g, F" Q) J# {
    temp = os.path.splitext(file)[0] + ".tmp"! t# M/ F' J" m
    9 X+ e9 Q+ C" A
       
    2 d  p' w$ ^6 X- H
    : [  L2 {: B6 S( atry:7 U9 i8 L, S5 B) T# q  c

    . B) F2 a* g% D5 ~/ B# remove old temp file, if any/ x9 F1 _1 z. o; y$ L8 S" S
    , Y3 R; ]! v8 ?" T9 Z
    os.remove(temp)
    & w/ z% q3 }2 b* V- Z* w0 F0 v. d7 g# r
    except os.error:
    - e  _! e' K5 p' G4 k, |7 X
    , Z+ Z7 z6 q* F. L5 I% Epass
    0 G# H" A. B6 k# \5 {
    ! m, m! k$ n' Q1 v7 m0 n; ?   1 g) e, m4 K* Q  U2 Z4 J% s
    - q3 V& e7 W% T# B) [5 h
    fi = open(file) #9 \: @% e. i' ~4 `% ?  c1 i; Z6 g

    2 C1 a# x2 C8 Y; |7 ^; X' t2 afo = open(temp, "w")        #' }( Y1 t* O; m' v* D- W( }* H& o% f

    . g( A" m/ r$ N   2 x$ |9 ~) L( t; m3 D% k& F, I: t' b
    8 T* [! ]! h( ?( I9 H
    for s in fi.readlines():, F# v  [2 W7 O- x
    % p9 C* o; M' y& ~$ M3 N
    fo.write(string.replace(s, search_for, replace_with))5 {; i0 h8 O5 m, z
    # j; O$ ], r; p  U9 a% K. {: e
       
    ) V  ?, z& d$ E% N) N' z) k8 g9 [) Q. c
    fi.close()' t) T0 |2 U0 T" K# \

    . Y6 S% I9 d# afo.close()4 D9 F# G2 U- s

    + F  ^! X) {; d+ L9 x   
    2 h3 P  w9 D2 I; U2 }7 W
    7 w, @6 `  U8 Ktry:
    % `; t: r+ y4 E* U+ t( [
    . ^5 d& m- M% G# remove old backup file, if any; J4 s! z0 c( d0 g! [

    . x% c$ x% `" B8 \os.remove(back), V% K: s9 X  p9 h

    " E& e' Q) |0 m# `& t" v% ]except os.error:
    ! t8 y& r) z9 M2 ^, T3 y/ P2 J% Q4 c) X  j7 z+ L, e
    pass
    4 M: ~- j2 K5 e# Q! X  y  F+ p0 e5 z! y! z9 [: B+ D
       0 F! T" g4 j8 F5 |4 C
    * c1 t7 e) ?6 y+ W2 ]4 d. `1 }
    # rename original to backup...
    : A6 ^5 q4 `/ X7 A+ x3 `! U% z$ H4 X, Q+ y2 w. I, ~+ p# A
    os.rename(file, back)) I* B5 M$ P' ]

    * K0 [9 y" k6 w! g  p  z   " C6 `; d. k/ ?& h, y& Q, ?% z
    * l0 p5 A4 B& r( Y5 v" f- \
    # ...and temporary to original" {' t+ Y- D# h  e# l% w! p- A
    0 c- w+ e# L! F
    os.rename(temp, file)
    & r' @1 C" H4 V  a0 T
    ! g2 R& m- x% f, o; s4 e; ]+ y8 f" W+ A   3 P- |4 t0 Z4 l( A0 n7 K
    ; _) q+ m! m' `- w; D- a
    # try it out!, x8 o: @& w' ~3 @) b- k
    ) X) q7 J' f3 ]$ g2 X* S$ T* g
       1 Y8 C7 p  X: L
    0 ?6 _* I8 M( o
    file = "c:\samples\sample.txt"
    7 j6 ~) }. m3 l2 P* m4 C3 E7 {3 r5 q3 [" ^3 A& @4 N' W$ t) z; Z
       3 \3 `$ {* q6 r) B6 O

    . m; r' E1 K- _, @replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    # C% a  p7 J0 H/ ^1 o+ [8 [( o% i9 G' D7 r/ z9 w/ X' c9 i* ~
    replace(file, "tjena", "hello")( S  g! W  d* }$ n8 K2 Y
    9 E) `- S" P1 l3 Y% t( A
         ]% V: l$ l' e' i$ Q3 @( \" g2 c

    2 r5 ?+ b) @% M* h' C2. 目录操作- a' ~  @! c2 T* k  z

    1 O8 j7 ^% N  A5 }% ?% yos 模块包含了许多对目录操作的函数
    8 w' d$ _7 ~: U8 c; z9 p0 W& a; J
    : w" j+ O8 J5 N, F: Blistdir 函数返回给定目录下的所有文件(包括目录)5 s# l: N, A' V
    ! Z; ~  N0 E, v: j$ |# U$ r5 _
       
    ( |' x4 J) X4 x' u4 G+ |+ U
    $ {& e  C, D+ }7 @import os
    : C( E4 z7 F* P  z9 ^+ }; R- S, n$ c0 a$ c1 T8 W7 c' {8 F
    for file in os.listdir("c:\qtest"):6 G  Z& J  b5 F

    8 ?( ^9 [, f5 fprint file- }' x- i+ i7 `' U  R
    2 `& i5 v" r  L" X
       + d$ \8 F) r: q/ s0 w

    $ S% W3 p, Y* f% J/ U; ugetdir 获取当前目录
    * H. C: _7 ]( u  f! q: o' o" [2 a- N
    chdir 改变当前路径3 i4 L5 `  e% g9 _

    : ~# b! j4 G, \3 H% F* e   
    7 g! n+ V0 E3 h% {4 Z$ `1 j- G) Y% T: T
    cwd = os.getcwd()
    : o2 b. t( E/ \' R! Y& i  h* p- z# R$ L' u) S$ A3 N
    print "1", cwd
    " a2 ~/ j4 t: L; r
    ! h8 N5 r) u; y# go down$ O) G! {5 |" v* @( H4 n, P
    " m  y1 i8 I+ A9 v& x* r; T
    os.chdir("c:\qtest")4 x# h) R* f* L1 H& r2 w! i

    . A; ]. ~6 E( S6 a2 d, X/ Uprint "2", os.getcwd()2 ?8 d5 g( w( ~$ T0 W' F: V$ O% y4 e1 U
    , O, U1 p6 y4 Q* y+ }+ ~5 P6 {0 d
    # go back up% F0 M, O/ u/ g6 g* q2 b

    6 b  d/ W) T3 h" l1 \" m$ \, Tos.chdir(os.pardir)#返回当前目录的父目录4 _( T4 l; y+ ]: y% g

    1 a) ~& G% d2 u5 G. v' r, ?5 [print "3", os.getcwd()1 O  @; R: S& F3 |& _5 M
    * L4 o& x7 w3 h! n
       9 t/ s& d( x' D

    0 d. A4 _7 n9 ]7 s/ z1 |+ H0 Xmakedirs removedirs 生成和删除目录
    8 ?+ b0 T5 j1 G" |6 T" a4 l
    " i  h. P+ l3 D- qmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    6 w1 e9 ?2 v+ M; z! D: Q- a* a% n( I  e/ ^- _" D$ T+ k
       - q% w2 k  e" V- f
    $ `6 G/ Q* M; G" M+ r/ H& B
    import os  o  v! L# y0 N

    7 r+ y3 f( L2 x1 Q* a* i8 d* v9 Q, ros.makedirs("c:\\test\\multiple\\levels")) ~$ }; h& f( D3 u5 N# q; w

    & A! E9 ~) `( Mfp = open("c:\\test\\multiple\\levels\\file.txt", "w")5 q1 R  X; c& ^# T/ w
    1 L+ \1 c4 r8 V6 ^& `, L6 z
    fp.write("inspector praline")3 c2 C% x$ ^8 [: e/ M1 y; H: ]

    6 c7 T! _5 k& u1 l. m0 N9 Zfp.close()
    2 D! _" A7 P; y
    * @* Q1 U" T- W' f# remove the file! N* x. p% \1 o. V0 ^

    # E7 h* ^# c7 ]# h/ u. Aos.remove("c:\\test\\multiple\\levels\\file.txt")
      w& K1 h5 |8 ?. w  T* f# E2 y6 [! r+ S( n- Y3 Y$ M( {2 S" s
    # and all empty directories above it! H& K; |8 j: Y2 ]: r. \. e8 n- z

    ! M3 p1 S6 q0 b0 S- _: Gos.removedirs("c:\\test\\multiple\\levels")
    , e* q4 h! x- F0 \4 Q2 m7 f2 o0 Y  U. |7 H4 p0 J: R! ^
       - E9 m' z  V/ E8 s
    2 @+ E. V+ F! z3 D) k
    mkdir 和 rmdir只能处理单级目录操作.+ t7 L5 ]) K% A7 O& s8 G: c( Y
    + e) q+ O/ n: u- o$ j+ ~
    若要删除非空目录, 可使用 shutil模块中的rmtree函数' i, q  `# n/ J3 r* z: J8 E. z
    4 l! L, j4 I0 x6 L
       0 r; `6 N2 V, s4 ~9 c  F5 |1 [
    . T( ]; P' V4 P0 d( Y/ j
    3. 文件属性的操作
    , b, a: E5 z" \, s6 A# z4 _9 I$ Y/ F# x. F6 A1 @, E- J! D8 D
    import os
    & ^- X! {% D, @' X* n1 b# P- N( f2 U& u. z2 ^
    import time
    " N3 }& s2 W: H: g" c3 ?/ C( t6 \- |4 I" I$ Z5 ]- q$ W4 F
    file = 'c:\qtest\editor.pyc'
    8 J( K! k5 O' y9 g2 l* \
    ! \0 r0 X/ s. |. C& O: V4 R; A   $ e5 {  O7 K1 e) J+ y
    8 {5 O" Z) ^1 N( z4 l
    st = os.stat(file)
    , y2 g8 ^. O+ U' h- y$ r6 i' J9 M; i; J5 {
    print "state", file
    % O3 H8 W- t) O
    - S9 \" i( T. H+ s5 |; A: l; P   
      W! V7 @5 [& r. q( r6 y. _8 ]
    def dump(st):
      p/ |8 C8 U  s* k" v. p' n) J6 @
    ' o- r  m6 G/ E: Y. A: fmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st' p; I2 j8 h! R
    * e+ R' {3 i  v
    print "- size:", size, "bytes"
    0 S8 l5 B9 U3 L. w
    4 W) c% Y4 H; L6 q% f# dprint "- owner:", uid, gid' X+ X4 P6 F; c8 f  u

    . I/ d4 Q* Z$ c7 Y# u4 Kprint "- created:", time.ctime(ctime); B  V8 C2 y$ F+ H; F1 p
    ! i+ J# k; k9 v6 T
    print "- last accessed:", time.ctime(atime)) c. x; \  m% N( H9 {

    & r  ]' ?  r" O9 p' V, ?print "- last modified:", time.ctime(mtime)$ J  ], l& Z$ I, v) ~) G

    5 b6 M$ s/ R6 l; D9 x. E% yprint "- mode:", oct(mode)- \" B  H) h2 I7 o
    % L9 P3 }5 d5 F6 a
    print "- inode/dev:", ino, dev- E# e0 {5 d& _8 t& M

    # M  D0 X9 C' u4 g$ B7 Z; B   9 a! u8 g) E3 M  \' `
    . V" J) |+ t; z
    print dir(st)
    $ s; J; L. Z* G+ M& b: {
    5 F5 X7 Q' r8 A: I& k0 Qprint        / r+ D6 ?. L- ~+ {

      i( @' @, P8 y3 s. Tdump(st)
    7 x# ?6 _9 b- Z  Q8 l" u* Z0 X  |* C' I6 B9 a' i1 M  _- c
    # print" {9 _* s" ]4 D+ h' Y4 D0 c

    " o) c! M- o0 ?3 u   
    ! ~: G+ x# Y6 z$ \( Q2 U* L: w, f' r! f: L
    fp = open(file)( ~( x& ^. }2 c" }+ z! Y* j
    . N8 E, Y1 ~( n0 @" A
    st = os.fstat(fp.fileno()): s+ R& J: n7 W; h3 |. X

    # N" N" k6 \) M+ ~" U! Nprint "fstat", file  k9 e) h6 A3 s2 ?, J6 ?
    . X( O7 c6 q+ D6 ^6 M6 |( U6 I
    dump(st)
    - p! X4 s1 W' F; ?8 X3 s7 K* [/ ?
    # C0 w' e+ b5 _9 m/ U9 F0 Y6 [   
      x( ?7 a! Z4 ^
    2 v5 _6 t/ G9 `6 P) 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):: J2 a2 K! N: w5 d8 C5 |$ K( W$ D- V( ?
    5 v2 ~$ i+ U& X7 f
    os.fstat(path/file)
    + L  [7 _6 z3 @8 a* {
    4 j& |) }3 x3 WReturn 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 ' t; N! M* x1 A# t. T* N
    可以放进文档当成附件下载的!
    8 g  V9 z2 u% T: m# U/ c
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-8-22 04:38 , Processed in 0.671659 second(s), 63 queries .

    回顶部