QQ登录

只需要一步,快速开始

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

    ! Y6 l8 W9 X" n' S1 e* z
    " J0 @7 F5 M8 I' P1 `5 G$ k, X8 Zos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作, l4 a5 H9 [/ O+ X& u( y3 S/ j/ M
    ! e3 _# M/ j( k7 m
       
    3 R" _/ m5 [; f, t2 b, G
    # t7 |( z+ x/ K3 A1.文件操作
    6 c2 ?2 w& O+ A: x. E0 B
    3 p4 b# L% \# K/ `7 ^2 }build-in函数 open 实现文件创建, 打开, 修改文件的操作
    ' |! ]' I! h0 B3 H8 h" g, x( e! E0 |  _4 l3 {, P5 M9 M  G$ f: w
    3 @8 r. O( P  m' X  o
    / p% X7 `; A& g6 y% X+ @; z
    import os
    * @2 @4 c/ n# b0 B+ W" y, t& k6 A: N6 J4 _1 w3 @- B8 M: e
    import string
    6 _* G1 [2 o& E6 c2 D' U; O# d$ Y' B2 M1 N1 G
       % E6 d% I4 C- j7 _; l

    & H+ L+ u" M  i6 l# _" Gdef replace(file, search_for, replace_with):
    - M' Q) C' s( B" h) v6 g3 D) b3 B, N5 \$ e- `" P
    # replace strings in a text file
    # E4 K! q; T3 E
    4 k$ r, Z; q" P- S; Y   
    ; Y, V, u6 E" k" |* \" W( y
    ) ?3 n$ ?4 [' F& z  v7 eback = os.path.splitext(file)[0] + ".bak"" [1 C- F/ H) \  c
    ' C1 g! K7 y' ^* w0 G
    temp = os.path.splitext(file)[0] + ".tmp") [9 M* g% q/ b8 c5 e9 t% K0 p

    ( f, F* Y- O' ]1 T5 _6 z   5 G$ k! T( w; D7 o7 V

    5 {) u- M' D# S, m+ m- Ntry:
    % I* G/ K3 x0 {* X3 z! B  J; c# b  t; C4 X8 h
    # remove old temp file, if any/ L7 C6 o2 d0 s) |; Z, J* U% q$ K

    : }7 o- [5 c7 X6 N& L" c' ^os.remove(temp)
    - T; U4 E7 ^4 r/ `' p$ b
    ( _% n. i  n, u& {* B- X: \# Eexcept os.error:& m! e6 `# o( a: T5 Q
    # b" u! ]* `1 G4 Q' B
    pass
    & l  ?! u+ C5 f4 v
    3 ]$ R  \5 i$ E7 |$ B" S9 A   
    / K9 N$ D+ a* e1 A1 v  j- g  Y9 {& T+ A* B
    fi = open(file) #- V7 Q/ d( ]+ \" q5 k! c& z
    " Q( T, a2 d; e3 [9 @, q! ]
    fo = open(temp, "w")        #
    5 p/ m& _0 _  a. h
    5 P; H5 m: C( d9 \' X, V/ v4 ]   
    3 k, d- p# e5 N+ i0 ^
      r# M% z# G+ s' K2 ~for s in fi.readlines():
    7 h9 a/ J; K; l6 D4 X6 V; e# x. c% p
    fo.write(string.replace(s, search_for, replace_with))7 r- v: E% ~2 v+ e" F

    ) c# g7 Y1 S6 i4 m' r" D8 Q' E   
    1 E& M* D( i" Z0 f: D4 m9 f; _6 {. H8 i+ f  r* H% T
    fi.close()4 m3 m2 m! Y, [. {/ ^
    1 j# S5 @  h8 E. R" G
    fo.close()% n- m& Y, Y  ]: Y+ H9 Y5 I5 R3 H1 W

    % g2 `7 ]; k, M   + q( h0 y5 W* _

    , Q# K# o8 M! Y6 X1 t- U( {& \try:0 @) \9 G9 N9 v4 {' g

    9 ^2 m3 F1 l) ^+ x2 |" i: Z. O; q# remove old backup file, if any
    / s+ x9 q( f, r/ ?& {: _
    / Z  Q6 v, ^/ ]# {( N8 Bos.remove(back); [% Y. ~- A4 H+ K, m  }0 }
    , H: S; O8 ]' u  E
    except os.error:
    3 e' V& L# A. U: x) o$ e& s0 Y6 d  f' h0 J
    pass* N: x2 n$ g/ t- K
    2 d" ?- r+ P) B0 l' ?* Q3 M9 W
       
    3 ?( w: x) P5 F  B# }  h+ i) i- c
    # W$ D1 c) c* Z# rename original to backup.../ i3 y0 A  ~/ H6 T$ }1 |1 ]5 h
      Q) z# \. l" ~" Q: p# _
    os.rename(file, back)
    6 J$ l6 H$ J! g$ L  j& m/ C5 g8 T& P/ j5 Z5 U% G
       
    $ \; n! v7 T" D' n$ t' S! X7 h7 m, _2 s/ _
    # ...and temporary to original# v5 \2 p" t3 P. x7 l7 v" N% ]

    ) i+ |5 P# @) t( K7 w: D' k! U7 Wos.rename(temp, file)5 Z+ x8 P; Z+ Q8 ^

    9 w( P* l1 \) Q8 L& d+ U   5 X. O$ r" u) Q9 ]  z+ s
      ^- \7 K; j5 G8 d3 [0 [& ?
    # try it out!5 M' R) j6 P5 y( n' J! E6 o

    2 [  |& ~* |  X1 }& T; r4 e5 ]   
    ! \1 i9 B; L) T! |! F! L
    4 @7 Y5 M4 o: v/ dfile = "c:\samples\sample.txt"+ ]4 B/ o  i  n8 T+ z7 \' q1 o
    ) S1 l( {& ]5 H0 F' c0 h7 J$ ^' f7 r
       + Y9 K  {* q% _1 W- a+ P6 f9 q
    , }: _+ L  j: G: ^
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    # V" {+ Y$ I4 V* D' T9 G" U+ U8 L" a) E6 O8 h$ j0 d$ N7 _* }
    replace(file, "tjena", "hello")
    " [: D6 k" i1 D" Y" d; z- e7 R) f( x6 H, ^/ a
       % _$ ?' s# H0 A

      z0 {1 b% @6 w2. 目录操作4 U, _' n, w$ ^: F! E

    8 S, f8 ]0 U# F4 T* j1 C6 C- Q% Xos 模块包含了许多对目录操作的函数
    4 h3 ]$ l- F5 |# I
    4 H1 U' @7 c/ J' c6 wlistdir 函数返回给定目录下的所有文件(包括目录)* L" Z0 A  ?8 E4 U5 p
    6 T- i1 @$ {4 @3 v% Q
       
    + ]9 k$ {4 M$ j
    7 N. K8 K6 ], \  q& `2 eimport os7 t" O& k2 |! F# F/ m

    ! D) t! Z$ ]4 C: ~0 [for file in os.listdir("c:\qtest"):1 w' b: u4 C& U/ L$ F
    3 o% N' }" P- y9 b0 F5 L# u
    print file9 N+ }( @6 \$ U5 O3 Q

    / w% C, E( m# v$ m' B   
    ; N2 P0 i" E4 X  }8 M& A- m8 o
    $ d. O! P$ A: o+ b" Pgetdir 获取当前目录
    8 i; i5 R/ R, [( _* r9 }
    . p0 r, g' o7 `4 @6 Wchdir 改变当前路径1 n! x5 q( z5 F; c7 S4 ?

    0 U3 A& H+ Q9 y% |+ r% K) D   ; X! B; \6 V! x/ j
    7 `1 R' Z9 U' b$ O8 N5 k
    cwd = os.getcwd()9 j: z/ X8 o4 E2 z

    ; z, L' Z1 b' B5 E4 [print "1", cwd
    3 E7 N" y$ c, y% t+ ?6 U) p, M" I. p
    # go down2 k% y7 e9 v: U& ^* Y$ j8 M

      U2 W& P- f& k% Dos.chdir("c:\qtest")
    0 ~  G0 M- V5 t, _2 {2 x9 D
    ; e7 X; C3 g. r" y+ i: n$ y& vprint "2", os.getcwd()( T3 n$ O/ r% R2 l& _: I1 ^- h5 P
    % J( R2 z( n2 x3 B
    # go back up6 U# k' v& K+ ]# X

    3 k+ K7 d6 ]6 t7 xos.chdir(os.pardir)#返回当前目录的父目录& _. L# a8 m/ q# M7 M4 \9 M* X

    2 G# y+ z0 s. n" m' B3 x$ lprint "3", os.getcwd()8 n; ?- }! K6 ~9 j5 T9 j  U4 j. O/ |

    # |# U9 Z' z$ Z8 ~3 S   # ^* m* a3 a% }! a" b1 b

    , y1 g6 p; ?0 Fmakedirs removedirs 生成和删除目录
      f8 D. x* _5 r4 p" A. g
    $ ?7 Q- x( p+ M% _makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除- e! P8 G; D- C; T5 G) f
    ' V( I  j' ~# ^! _* u* ^
       - n8 }7 w  h9 W5 X. J

    * p7 y& h0 ]; K% |  v% Eimport os9 S) L% g/ c5 |: Z- n7 w

    & P% R( e/ z  `4 W# los.makedirs("c:\\test\\multiple\\levels")
    : [; v1 {2 A8 A: I' V  T" u( r; D  D
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    ; ~4 C+ p6 s: W# p. C: k7 ?. q% S+ W' @$ M
    fp.write("inspector praline")# L5 w6 R) l* h
    / c7 U7 ^$ d: W- |9 Y
    fp.close()9 C/ z# U& a  m: M! v

    , B' j* `2 M* R4 f# remove the file
    2 i8 ]1 l9 T7 S( ^, e( s7 d6 X; l# P& U
    os.remove("c:\\test\\multiple\\levels\\file.txt")3 t' ~' j0 ?; C" ]

    : h$ F: l: N2 _# and all empty directories above it
    6 }2 G) B1 d' H& L6 A5 E6 A: j( {8 G5 q7 i" ^$ `
    os.removedirs("c:\\test\\multiple\\levels")
    # j- i* k9 M8 D' ~& G
    $ y8 R$ [  q% {' ]1 I   
    ( r$ `  M4 j) _+ v/ W/ O0 T# z2 z. H9 V! H! }- s
    mkdir 和 rmdir只能处理单级目录操作.
    ) f, |6 b; C. p$ J2 g: J5 M$ e) G# n. X
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    ) q1 Y8 N, J6 j9 Y2 X+ f" H
    # f* D; @7 C  K# P6 f   8 ]( R( q  ^7 c5 w9 a8 w. R

    1 g/ G. p- C8 v6 t# \9 o9 e" q3 Q: }3. 文件属性的操作. ^5 H8 t+ X" b5 {+ P

    9 o4 q/ U: s! U# Aimport os
    : p" o" e6 g2 q/ c% i3 Z# I* }3 c
    , H2 j- e* ]2 }, {( ]9 a2 d; U4 Uimport time1 A# W1 g( D2 a; r' s

    : V9 [* o5 `4 Kfile = 'c:\qtest\editor.pyc'
    ! w) Y# q6 V/ ~# B
    " ]( n/ m4 K. z8 F6 U( {8 e   ( M& F1 r8 o) m/ e
    / ~9 W6 ~* {8 r9 e2 D* j# q
    st = os.stat(file)2 h/ R! [3 {8 }4 |; G1 q$ p; U) x
    ( [, m$ A  e* v8 t
    print "state", file& v7 T0 I% `5 _

    7 T& ?- r/ {. {+ Q   
    . s" D9 O9 S2 E8 n
    + ^2 I7 W; X4 n  y& w4 q3 j7 X' hdef dump(st):. Z+ h% l7 j( X: v2 Y$ _6 M" x
    - I. X* g9 K5 \* N8 j0 T5 X
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st# X9 L4 M8 |2 s

    # [* k2 [- ^6 m& k& nprint "- size:", size, "bytes"
    / h8 H# ?: d+ d( X  W: U  b7 t2 C) }
    print "- owner:", uid, gid
    5 o3 X  ?/ X8 p) h" P) \- t" ^1 |
    * c4 v$ M/ E8 K4 gprint "- created:", time.ctime(ctime)
    9 [- \3 E, G3 s: @( g9 B0 `" E- B; [$ R
    print "- last accessed:", time.ctime(atime)
    & ]# T/ J" O, ~, H9 E5 |+ ~7 N" p9 M' E  I7 I2 X
    print "- last modified:", time.ctime(mtime)5 M7 ^6 ]/ |7 `/ i

    8 n$ f" s- Q( X+ j: jprint "- mode:", oct(mode)
    ( Q& e- d: J) f
    ! F; \/ F- P* g" H7 Gprint "- inode/dev:", ino, dev0 U8 R5 a2 p3 d$ l( d

    2 U+ h# ]8 x) Y   
    ; s4 q' m1 ]9 \- O( ~1 s
    2 z8 M6 b! h& aprint dir(st)( k& ~, T# Q. H/ o: z9 V. J3 N

    2 I0 C, Q. g$ Lprint        . M! F" |  b& i/ P+ H6 n- q' m

    4 X! z7 r# D' g' `dump(st)
    1 W6 [; X7 O# r' y4 u
    / j+ _) u; {5 K6 f; k# print5 K! c# W5 r% P# n7 V$ G

    4 `2 ]; E/ z; p4 p/ }  b, L   
    : f7 K3 `, L% R# \9 y, r# w9 {! ^4 L4 I
    fp = open(file)
    / P4 D+ V4 j2 h' O% q7 h
    * ?  _% ~- w, v7 Q7 A2 t  fst = os.fstat(fp.fileno())' i. f- D* V/ A( E( s, M" ?
    * G8 o/ w5 v+ Q7 w" _# O
    print "fstat", file5 h$ H% s! T/ W0 m9 J

    ' Y3 r, e* h" U. J1 Q: o# s) \  d" Ndump(st)
    ) s) T0 o, Q4 E4 x. k4 E4 s$ m, O2 ]/ I6 Q7 O# D2 {7 U
       
      u2 G) [6 R9 u% M$ a$ h/ q' N; n+ z# E  R+ Z4 M
    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):
    ) ^* H7 d: C4 m4 M0 f- P
    ' d- Y& I  j# O& yos.fstat(path/file)3 i, p( A0 E, E! a1 f/ \8 z  l# k

    : e' |3 P1 t$ A( n9 aReturn 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 6 e4 F/ D) y4 q5 k1 \
    可以放进文档当成附件下载的!
    / [/ f$ D# C1 T2 ?
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 05:17 , Processed in 0.426708 second(s), 63 queries .

    回顶部