QQ登录

只需要一步,快速开始

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

    5 x* Q, V7 K: g0 G6 v8 a3 S# g
    1 [, x6 G6 t7 `" H+ a) Oos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作8 d/ [& T+ c, i9 E6 q
    * m+ y+ a$ D3 b! [4 e/ f1 S
       9 S1 b# A1 p3 ]3 i0 m
    ( T7 T) i$ Y2 ?( g( h- d# M
    1.文件操作
    6 o: X5 g& S' N, U3 E2 D
    ' X; i) c, v* _5 G2 O3 @build-in函数 open 实现文件创建, 打开, 修改文件的操作
    ) }# r& `# ?* f- _* V# ?' C2 g2 y8 ~1 O  {2 x! l
    - F) ]3 b  ]& Q6 a" t8 X, U2 H  T# f  V

    / t1 }& G# }7 gimport os
    ! Y5 t* D- B1 J+ @( R  I! `% o
    ' s$ t, n( ]9 Q  yimport string
    8 b4 O1 N: F0 @& S2 L: ^; h2 H7 M$ I# a- u
       2 x. B5 v$ W+ A! z

      U, n$ ~7 ^! [( p' [% W( W2 Gdef replace(file, search_for, replace_with):
    1 S& a2 O- N  ^  Y/ Q6 l
    ! W& U/ l' Z/ D9 |4 n/ J# replace strings in a text file6 R5 k& k$ C; y4 _
    & ~- e1 Q  W# E% P8 [" E5 n
       
    . R/ @" L" b4 h. n* K
    $ X" ]% u5 T( S9 tback = os.path.splitext(file)[0] + ".bak"
    0 t. L  q3 M- n4 W' z- U3 T/ g& X$ g/ y6 ^7 u( p' d
    temp = os.path.splitext(file)[0] + ".tmp"
    7 D# T# K; F8 Y- D9 j! r3 m/ A, s( M  p, Q! z" Q: T
       6 i- j* O# c! s7 ~/ Q  N

    0 \2 t5 W7 O: |( ?' F# Q6 l$ rtry:+ V  F# A5 B  u- f. o
    - l, Q9 F" B9 n- ^. U( C- f- R
    # remove old temp file, if any
    7 P4 w/ k* {7 w9 S0 U: T  C1 W
    os.remove(temp)6 C6 |( x; [  b8 q( Q* v

    + J, Y! i7 ]* uexcept os.error:
    4 v1 h( w% `* o7 N
    ) F& V& }1 V8 O  W# P. C: ^* gpass$ G* {- N, J: e  q

    8 ]1 }; c) Y, V   , B' M" i: d; s, F

    + h/ ~4 t4 H& Y( w" ^1 Efi = open(file) #
    " l3 f" H! Q- V) S2 o. i2 f5 M5 q- ~' v! @) I
    fo = open(temp, "w")        #
    # B4 F( {: j+ F: g- I
    2 U( I, _$ v# u- z   
    $ o: h# w8 K5 M' G
    : |6 u: Q" h( O* U: Pfor s in fi.readlines():
    $ a4 U3 P- n: o& g" m- U3 M5 j, }4 k! ^
    fo.write(string.replace(s, search_for, replace_with))3 K3 g# }, N! c: W# W

    3 C3 v# f% g& V' K; }- ^$ D   ' @& O2 E* ]" q0 _4 D% p

    0 w" k7 H; D: rfi.close(), \5 J; D5 |9 q. ?

    2 N! Z2 G! r- c( m1 o0 T2 ufo.close()
    5 P* m4 K6 L: m: a
    1 C5 D+ R: b* Q( q9 B- V1 v+ F; ]   
    : B) |7 X% _/ C4 ~4 j; Q* a' p0 N  a& Q4 X  |0 v) f! b, `# D
    try:
    % z% P/ W1 z( i* q3 ^1 q. A0 q) ?; [2 H9 V7 H/ {1 J. N, A, ^
    # remove old backup file, if any" N8 ^- t3 t( e# G% O3 U5 o/ y( G  _

    5 [$ l8 P7 r6 c1 ?3 ^os.remove(back)
    % v- p# v0 u, r7 m% K' S) X
    ( x" [2 A( e& J+ {9 _except os.error:
    # _5 Q& n* p3 ?! ?" w- K4 [3 u) w, r# d: {7 _
    pass
    7 S. b% G5 @7 m9 P* A, I5 ~
      A* j- A7 l, B) j  r   
    : Z! u4 X, I" j% ~# c
    / t0 H% {9 P: I. r4 T' H# rename original to backup...
    2 o) {9 ]6 D% q! {0 O5 L
    3 p" }$ `# L+ s6 ]os.rename(file, back)
    ! ~4 X4 w) w" |/ V
    * c8 ]2 P( ?4 O' u   
    , Y+ {$ L: t2 \$ O* F- a" b2 U2 p. \/ K2 _) p# R" ], I/ s
    # ...and temporary to original
    5 s5 t( l; k' O* n9 J* J& U0 m! z* T$ Z
    os.rename(temp, file)
    % q, ]6 R" ]! O" m% N. [
      H( s# h5 A8 O8 }% ], o   
    2 E- e" l& c9 V3 H# V: B% [% \# k( w0 D# Q1 i* @  D
    # try it out!
    / k, y3 ^6 V5 G' A; ^9 p/ X1 l8 [5 p1 V! J3 G% A8 R9 T$ r: N! X3 D
       
    2 g+ A# U& n2 e. R$ G+ \( P5 @6 n7 B  _: a4 b
    file = "c:\samples\sample.txt"; N% R6 q/ ]: x8 x+ J: O7 E. G: V

      Q) m& }8 }4 \  _   
    7 F# [, U. O& t
    1 z; u! m3 d, \" Kreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    7 R3 O3 ^9 k( r/ @* R! S. z2 {
    replace(file, "tjena", "hello")
    * F; Q! z1 P% \& d- ^0 Y2 @+ E3 |2 x( O- F* A
       
    # z, H5 p6 ~& U5 G# I4 J
      X4 Q5 V* K& [/ y( ~2. 目录操作
    " }3 n% r+ R( C8 K( I/ N* H2 {
    % ]3 p0 H8 ~9 z6 x% z/ \: los 模块包含了许多对目录操作的函数/ P1 h. a- R4 n3 _

    7 D. k5 \. B2 _+ r) ?listdir 函数返回给定目录下的所有文件(包括目录)
    0 n4 }+ ?7 O; x' S, N
    ( W; j+ R) P1 B( _, Y   
    4 Q9 p% m. F7 x6 o5 ]/ B. U% K( h" w9 \8 ^1 @. g% [
    import os
    + C  E, T* }: I; U
    & X7 `6 |+ G/ ~& Z# V" i9 jfor file in os.listdir("c:\qtest"):
    4 O, C4 R2 I+ p  Z7 E/ h+ ?, a7 I3 ^" h1 ?
    print file; B# O$ c: Q' S. M, m# {  E8 a* o

    * C" y6 e9 ~5 z! T   
    * S0 s" D: K( E% y+ e' z0 m/ s+ [
    ; |9 Q9 |. I& }$ L4 ~/ D9 Zgetdir 获取当前目录. u4 ]1 P. Q( q2 N% s( r

    0 T  @0 q# k- Lchdir 改变当前路径& u$ |# r. Z4 B! V- G* B7 M
    % O: V. L% P% ?! a7 J
       * j) `7 e5 U  \# O" _" q7 V

    9 Z9 _2 N7 |* icwd = os.getcwd()
    3 @) R0 ~9 I1 J% D
    + ~7 d+ ]7 j3 r, R7 \8 n3 Eprint "1", cwd
    4 H5 {& F) ^+ b, M9 P; O3 N! {! z3 }; U" F
    # go down
    5 w; X' F. [& i2 K2 i' h  O
    0 X" j% |% l2 a/ ios.chdir("c:\qtest")  O1 u7 [3 A+ o3 n' D, S8 j

    3 U# l( E8 @, B& I- ^/ e9 Wprint "2", os.getcwd()
    # }1 P# ]; f% ?% D, @! [
    . e7 j0 ~+ T" a. z/ B; g# go back up* m2 |" p& M6 U9 I

    : j' m: u+ e4 ~( K+ ios.chdir(os.pardir)#返回当前目录的父目录8 t  o- A1 G+ b/ N! @$ p. s

    ) k( A6 h  g# O% D0 E8 Bprint "3", os.getcwd()
    1 x! M! V! l0 Q0 f/ j% I4 ^( v0 n! d2 U
       3 P5 H0 P5 h2 L5 }9 F

    3 q) I- b* [8 _' y2 vmakedirs removedirs 生成和删除目录* I4 R1 j& ]# r: r& @, Q. T
    , i/ a& Z" o) ?
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    4 y6 @$ a% F- i2 \7 |8 I
    9 v8 s% G1 K6 W( Q  A   
    7 o4 T2 C8 \7 ^. P( O0 v3 d3 y" P" H  ]( g* J: x
    import os2 k' ^2 I* M& t( i, m; P2 r

    7 ~; n7 |0 Q& U% I/ r. C5 los.makedirs("c:\\test\\multiple\\levels")" O2 z+ G, ?- v" d0 s. A
    ; w: G) i! L8 C) A/ S  e9 y$ r
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    2 ~/ B0 B& O  q% L
    9 V3 r/ i0 D% lfp.write("inspector praline")- O& |- G. [( \. c4 u9 O  R

    % b6 t0 O9 f+ F0 |0 [fp.close()
    3 z- ]' V& ]' O, ~9 L3 x+ b; K7 d- g. X8 {. D5 j0 \% y# C
    # remove the file
      X& ]& B+ V% m+ l% Y1 R8 a0 R8 `  F& s2 C( ]' m
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    6 B7 [# n" {" Z+ m4 t: ^# A8 i
    : ^) i* ]) ]4 N7 v# and all empty directories above it) M; `2 P! Y. L9 @
    * ?$ Q2 V2 R+ x9 W& V0 `9 }
    os.removedirs("c:\\test\\multiple\\levels")! z5 j  `4 P; C) _
    * W) R; h3 ?: q, Z/ o' j+ _- T
       ( F, l; `  m; M' y! w/ A
    . p7 u- L6 L. c  O: l1 H. ^" s
    mkdir 和 rmdir只能处理单级目录操作.
    5 M! D7 M# t$ |: s- E; d3 t
    1 W) f) Z% J7 l3 y+ s若要删除非空目录, 可使用 shutil模块中的rmtree函数
    8 [: K% D5 T* h3 c
    $ L2 t* H& ^! z4 ~   $ a' b* ?# ]; s$ Q

    ) y% }8 v, ]/ J5 `2 J3. 文件属性的操作* d8 c3 \% b6 `  }1 `; \9 u4 w

    7 h7 t: d$ X0 d5 v( Fimport os: Z) k% p' K" I) `

    8 g$ C* ~7 ^) jimport time# ?- v( u0 s3 N3 z; j  y& @) |
    2 {9 u6 m- ?" g% [
    file = 'c:\qtest\editor.pyc'+ x) k* f' g; Z" g

    % Q5 Y3 B9 M5 P9 D4 A! ]1 M; e0 W   * z7 y+ ~7 }! c6 {) }- _

    * Y5 q, _* F" @st = os.stat(file)
    # S# {5 J; x- V* I( V
    2 n: A7 m1 ]7 Iprint "state", file
    , T" y/ i) N3 L4 h1 v) g# h& c2 x/ O. l# B& G. m# e% z' l" y( c
       8 m0 `0 t8 ~& W0 ?4 w

    . ~1 x. H- P( w5 T/ |& U/ R4 Odef dump(st):: ^' X" ~# B' f( g

    " C) D( _! X! m! Q" Q1 W* Imode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st, |( Y1 D5 q8 o* D% v# z. @( c5 i
    # R0 x- _9 A8 ?; W# T4 L
    print "- size:", size, "bytes"
    : B! R' L# s  O  j6 _) X/ C2 k9 |  H& S. n! a+ \% N/ ]
    print "- owner:", uid, gid
    3 D2 P, p4 e* l4 S( Y& |
    - I' V5 m4 p, z# m7 H# [print "- created:", time.ctime(ctime)4 g& ~6 w% O' B" d$ L7 a

    ; I" c( X9 B- b1 `" Uprint "- last accessed:", time.ctime(atime)
    1 l- o' @3 l8 h  \' V. j8 y0 w& D' k" n
    print "- last modified:", time.ctime(mtime)! `9 d- x% r8 a2 a* @) |6 F; J

    0 C& d  h* F# m& K0 u- J. zprint "- mode:", oct(mode)
    # f- @- X4 a" r% w7 r6 `1 Z
    $ [: s" R0 t  |  gprint "- inode/dev:", ino, dev
      J9 e3 B) ]3 H  o1 K% v4 V/ u: h& d9 q2 m/ [  E& R+ N; \$ {& ~
       ; u# E6 T5 H# D7 u
    ) j# Q  J$ ]8 Q5 u7 X* t
    print dir(st)
    6 f1 I- h; N6 g/ v
    * T0 Y) X' A& l% k! O' j- wprint        
    % z8 }4 q0 Z$ V+ H" X. `, f' `1 n5 Z7 j6 l
    dump(st)8 N& T; U0 K! M! ?" j

      \7 X7 i3 e* Y. w% x# print
    9 [! f6 u# E5 D) U8 |* C' n
    & y2 P( p, [5 \   
    * ~. c2 x( G4 j4 p& Y" c' v. V% O8 k, J: A( U5 ^) F
    fp = open(file), l% \1 X3 E2 C! ^

    5 z  }1 N+ L% ], w2 x. c" ^+ m" N8 Dst = os.fstat(fp.fileno())/ U$ Z2 L' m. T9 n- I, r4 P

    ( L1 [# N2 I  ^0 c) ~print "fstat", file
    8 c+ S+ `1 X% ~  P6 v! Z; j; }' }" B  H& m" q2 D4 ^
    dump(st)
    ! H8 l# H$ a& I2 a4 S6 ]- c( O: _  q' @/ J
       
    0 U5 G; s6 l6 c' m* U8 n: x& |' w# X( {; P9 \: F' i1 z6 k8 {' \. _
    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):
    : ]* H3 _7 N' }. p% R5 u9 o( H7 n3 T8 q6 `
    os.fstat(path/file)
    ( E% t- n# r- N0 v  H7 K6 W) ]
    # M/ M, Q9 c% @# F4 oReturn 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
    * L( {7 z1 s$ I可以放进文档当成附件下载的!

      w0 v: D! T; M0 R很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-5 13:59 , Processed in 0.446398 second(s), 64 queries .

    回顶部