QQ登录

只需要一步,快速开始

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

    * p* V1 r, {/ D5 \8 \$ M2 ]& {5 H, w3 q
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    6 r* i7 g3 a9 l4 Q" |1 V1 Q: l' [
    2 ^& }7 B- L* I2 c   
    ( X/ B+ K$ N2 Z2 ^7 _/ ?; s8 `- y& m5 @: X/ a# ~; k* c
    1.文件操作
      [2 ?$ V! J" D9 e& `) p
    0 E& ?; h& R, T7 \build-in函数 open 实现文件创建, 打开, 修改文件的操作
    7 {# a0 m& U  C  V4 V
    ( ~% N) ?+ l+ ]! x ; W, v: c4 R' N9 E" b
    3 g- V' X# i6 `
    import os+ ?  [- c) B6 x8 [1 Y5 P
      l4 C8 A! B# C2 H0 l* V4 b
    import string
    & ^* x" \# J3 c: b8 v& a8 V: x8 |4 N% X5 e0 C
       
    / S( |2 ~) R# m& G, z7 g  P! M9 W9 Q+ ~7 M% ?) L$ V! O
    def replace(file, search_for, replace_with):1 ]: F+ V9 X9 Z
    , {: F. d$ v5 u/ H/ z" E* \. T
    # replace strings in a text file, S# M( A. K( I; W* k1 m# [

    , H4 i  P' R* C# M, W# T   7 f: D1 p% E" I6 W+ O$ f7 n% A

    3 \' h8 n' c) ~! p" `; Y& yback = os.path.splitext(file)[0] + ".bak"( z( B( [' L, p
    $ r3 K# s: c* l* }! D
    temp = os.path.splitext(file)[0] + ".tmp"
      C. Q3 {' B1 j6 ?4 p8 `' z2 |2 U4 R: k% ]
       
    * ]: `: c% w9 K' P
    : \) L; {; P  htry:: T, ~: ~0 A1 ?
    # B  q; m6 ~; P4 N7 \
    # remove old temp file, if any! i$ V+ R" g4 n  A3 v( f

    5 Q' ]3 q6 p* Y/ Z$ ]8 oos.remove(temp)
    & W2 [3 k. J+ E' n) k% ^
    ( q# j& x7 F. [: H) X. oexcept os.error:% N/ y% A8 c9 a, q0 R

    + B2 Y1 j- N! b" z- xpass
    ; |1 \6 c1 ^8 z5 [
      K6 r% X  f% [, }- y   
    2 ~2 M1 f3 ?2 v$ m
    : Y) D$ U6 C( y3 c. T8 ^  Kfi = open(file) #
    8 W" W( C" z; x, ?9 ?7 b: r  @4 h* J$ r8 `+ K) }( A% j
    fo = open(temp, "w")        #5 q2 H1 H0 z. V) l; P! k6 H3 o

    & `! x, ~" N1 w- R) `+ B   
    . _7 W( h. m! Q* h- t& {. n' H7 S! a; n6 A( x: b* B
    for s in fi.readlines():
    ' c( C: L6 i) S9 o/ L' O0 h
    % d, M( n* e, k% ~fo.write(string.replace(s, search_for, replace_with))0 C* z* y2 f: }' H( E2 s; G& B
    5 C, ^* L: ]$ b& S; h/ T5 t1 N* o
       3 U9 ?) q# ~3 S& J- s+ ?

    ( y# B$ q! @9 H( P' w+ ffi.close(); z' n# e( L, I- y4 w! n; B

    3 K+ j; _% C0 S8 s( Y  Nfo.close()1 O9 ?4 b" T4 g

    . x3 ~; f' J% e3 c1 r# f     j! s' @1 ^, r1 @" j

    1 x9 z+ `% u% Utry:
    + F5 k2 p6 z3 ?7 g  p! E" d" J- L* A$ X- g3 v
    # remove old backup file, if any
    4 I) \1 p: ~0 U6 X, g) Q4 [" E* F
    ; J# M4 A1 W8 q# qos.remove(back)& f9 R1 M9 R2 B: `) v9 h
    6 H7 J. h. M2 k) R+ b5 R- d% z
    except os.error:
    5 z8 f! h; D. E8 {% [8 I0 ^& N3 l* w/ P! W% ~; g+ \5 H
    pass
    * {& D3 J% M& q4 S4 p2 B0 h
    . t  ?# V' i. D' i8 @) p   
    # A& v' G! V6 u8 v, L5 u1 f& B. Q" }9 V, ^9 M5 f6 f
    # rename original to backup...! h* j; C% G0 \+ f1 O% G+ Y
    0 r$ D( X$ E- g7 W$ w0 L
    os.rename(file, back)2 I" T8 v& @) U
    8 B/ \5 _* d7 u4 y9 z' y8 E6 |
       ; T2 \3 d* G+ }* q) r# g' Y

    . o' S# v! U4 D! |; {. T# ...and temporary to original
    * X1 V2 v2 ?& s# V) n, \  r6 V$ i# B& p" L* |5 C$ r: V- _0 y7 n/ i7 \
    os.rename(temp, file)
    5 A9 l& _$ p- B8 j* q. [: E; o' G; C8 ], A1 f% e6 L- w6 d$ S  Q
       
    % J+ [' W7 u& E; p, s2 U$ |& y
    . T0 |4 D1 U0 [1 {; ]4 ^2 I! a4 s# try it out!
    * O) J( S* e9 j6 s( y& V. A( B+ u( s- ]
       
    # t2 m+ M6 ~: F7 w& h6 K/ I" u- f/ ?6 g* e8 c/ T" h3 l5 Q5 J5 ~- d
    file = "c:\samples\sample.txt"0 {& f6 x' K0 q# T" y+ q

    4 b2 B9 ]4 F1 m: Q- v   
    % Z- z1 ~8 M- _/ c/ H
    : n8 y& U5 l" U$ I+ _6 rreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena3 {, t$ q" Z2 X/ Q( @  m
    / w0 `9 C: K. E6 j
    replace(file, "tjena", "hello")
    + t; a  _% W; k+ j* Y! Z8 d% ]) a& L* z+ U! a6 C
       0 G+ ?0 [+ s! ?! [% c) l
    . i6 r( K# |/ w. Z0 r
    2. 目录操作# J  E/ d9 i) Y4 r2 H9 O! x$ C
    ' d# l6 c" Z# H3 L
    os 模块包含了许多对目录操作的函数& p, ?% j  _! |$ j8 a, O
    : f2 r  Z: J3 V+ _4 _% e" B
    listdir 函数返回给定目录下的所有文件(包括目录)
    5 N: N0 o: j$ K7 I. J
    , G1 Y# B$ m' X. w  i   ( x+ R% B" M8 w: K
    - v5 F6 t# t8 v  O: n
    import os
      H* ^' T* z: g9 m8 K7 h( v
    - ~4 y0 f' N) bfor file in os.listdir("c:\qtest"):1 T$ y* [  n: R+ X  @
    4 w4 \9 b1 h: c$ e: {& ^% P
    print file. K- [, r0 t7 e. M

    3 ^: D: H1 w8 x4 q" {! r2 |- S/ O   5 v2 h  F% w* X2 g) t5 y4 H3 G8 h

    / _& j0 S0 p, w. V- Q. [! \7 B8 @getdir 获取当前目录
    0 {9 n  L. @8 v+ J/ g2 S) z6 G, I- X5 n
    chdir 改变当前路径2 X6 Z- q& O6 _9 d
    # a+ k- q" L2 G# U* @- U% I8 w
       
    # w( p) A, C  E  K5 G' {* G, {
    . s: K1 N$ V4 wcwd = os.getcwd()8 n% c; n3 B% g( z7 w& @
    7 V5 N( C& Z3 M" y! s4 Q0 N- g. S
    print "1", cwd
    + c) m0 i( m5 ~, m
    ) ~+ U' E  K8 Y# p! K# go down
    5 n4 E0 E! \" X, U% I' D! T( h: s4 I5 W/ M
    os.chdir("c:\qtest")+ I/ z) t( m% I  W: i. U

    $ v* h( T7 A4 h0 iprint "2", os.getcwd()% h5 u0 l0 M' o% q

    4 T" z. Q* l  J6 w7 y# go back up9 D7 ~1 q2 H5 b+ g. s6 ]. i

    / \; i  J7 w" z( k2 l- E, [; ios.chdir(os.pardir)#返回当前目录的父目录
    % v0 A& h2 m! K4 O% o/ ~8 J
    , O% F) n, B# M+ G+ f; V) Z' X. lprint "3", os.getcwd()
    " A) W* m+ Q- h2 i7 ^, n' E: B5 ?
       
    " w' z' t) T1 U: T4 P4 h% K
    9 e8 y- i0 U1 B. i" ]% f7 e% n  Lmakedirs removedirs 生成和删除目录
      \0 v" Z) d5 {5 e6 i. D5 j" Y5 I4 i. S2 q- i
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    ) `; p! _  H- W; b  o" ]- W: ?! E8 O. d6 u/ s; j
       + j9 D; I. p# O/ N5 A

    ( a7 \! u1 _& G# u/ F: N  Eimport os
    7 a( \+ ?, z7 o
    1 ?0 Q. ~! [' Y2 E, |4 f8 A/ s8 L+ s" uos.makedirs("c:\\test\\multiple\\levels"). O, R2 r  i. W0 O" f; X9 K6 V

    & v1 v: c+ n) j$ u; @fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    , t1 a, X0 K9 m$ @+ T2 a" J* u, J) x# w& g& q7 _3 d
    fp.write("inspector praline")
    $ i0 C7 j$ n2 ^0 @. `& [; a/ Q  M& u! g$ G. W4 p2 }; d. k9 D
    fp.close()/ H! i9 Y* c, k0 @

    % M) A/ Q( O$ M" S4 X! C% `1 m' @# remove the file
    # i; t0 ^: m  @. G' n3 ^
    ( m, ]+ `, |4 S  q: e: Jos.remove("c:\\test\\multiple\\levels\\file.txt")
    / D6 S0 B) y7 P4 }) ]/ ?- F+ d- v/ R& i, K% u0 w
    # and all empty directories above it
    # Y! ^: D2 H; @6 \* }  @! }9 D0 f
    os.removedirs("c:\\test\\multiple\\levels")
    7 I) Y% r- j) t, _5 w/ |+ o& X  r0 q* \6 r9 Y1 h+ D
       3 W* L; E1 K  |- Z0 h- F* Y7 |3 H) H
    * d: F% A" D7 c$ a3 \" P& X
    mkdir 和 rmdir只能处理单级目录操作.- B; w9 U, l/ M" g0 c1 e
    # |- }) O& k$ k' U
    若要删除非空目录, 可使用 shutil模块中的rmtree函数0 ]$ n- D# C" S8 ?
    ) p" U7 [; {% w, T# v: H
       ' a1 t% G) q- a9 U4 w

    : E8 e! ?( ?% z" ?1 I3. 文件属性的操作* L) Z; u! n7 z; i* T

    5 W( g% N" d. @$ U1 {import os2 ]$ Y* G& d0 r% m- r2 T, |3 `

    9 e7 M9 n/ V3 U5 t+ limport time7 D, e! ^) U% Y+ i

    - i  ~1 a9 ~& G+ }3 Hfile = 'c:\qtest\editor.pyc': `! B; ~! e5 f
    9 H0 Q$ D# X6 Q5 _4 A3 h
       
    ! G" S# \  f" ?8 |
    + a+ W3 B6 j! h, M6 [0 c; a8 G2 ?st = os.stat(file), \2 [4 n0 a0 \* |
    $ o! v9 @7 ^3 }8 \  Z9 A' I3 W
    print "state", file
    4 i4 ^8 K% W& h  n$ V
    ! u8 M5 a- n5 B8 R* a) I   0 e. O# s8 l0 t9 ^
    4 v- u& ?$ d2 h" C3 L- n  Q. a- V- Q
    def dump(st):
    1 m9 {6 B7 e0 `0 }- e( x1 t' @
    ( }) `7 t6 b  x+ y5 _mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st/ I8 a% I' T2 d* m5 k0 ^

    / P  |0 b) |, L! d+ G( F2 Vprint "- size:", size, "bytes"
    ! E& Q6 C0 d2 w" a
    , _8 f1 ]* U$ S6 c6 c' V# Q( Wprint "- owner:", uid, gid2 b* z$ g, R; H+ h9 W
    ' R0 c) d1 |. R% t
    print "- created:", time.ctime(ctime)
    ' `8 j0 p* U1 V- N  u5 r5 K7 d  m7 f8 n/ `3 C5 x
    print "- last accessed:", time.ctime(atime)
    3 u% r* e' H2 `! V3 [9 `; L9 |1 v3 M* d, ~
    print "- last modified:", time.ctime(mtime)% b- F( \: `, F$ J7 D

    ' ]* [; |! M7 E1 Z9 Gprint "- mode:", oct(mode)- s! h. |8 X7 j- u5 s- t

    ( Q! a$ a' D9 X) U: C9 q" [- s7 z8 Tprint "- inode/dev:", ino, dev1 `$ N' r1 p9 X  i7 n) ?
    + a0 R$ a" ]3 c/ O, r+ G9 H
       
    1 u$ {; `5 C. `8 i1 H, H; p* u- K' `1 a
    print dir(st)
    . g# w# o5 \* W: V4 Q9 M4 h: y8 z" n0 j& j- T
    print        
    " m; |% a6 D$ Q* |% D5 j7 |* Q' d* L; B( i7 w$ D+ B
    dump(st)2 l7 B0 N* W' t& z/ R2 T+ }. l

    ( h3 q" E% d( y) \# p0 g$ G# print
    6 |- }2 e. u* S0 ^) E/ ^/ j2 W) h: K; i& W  {
       
    : {! a# k9 U' W# s
    # z9 a3 \6 h8 _3 Q9 F- {fp = open(file)6 k; n; l- s1 g4 h; q# c  C

    % v( Q9 \/ d+ E: V# R3 _# cst = os.fstat(fp.fileno())
    & G  O) J* g, r6 m4 c
    ' v" r0 }1 M) \( e4 y# Nprint "fstat", file* H; U3 W3 t. X

    ' i6 q' {% T) d; t$ D( m' D% Jdump(st): s) T$ F; p2 |6 V
    ; P4 ~& ], R: X+ S8 J3 E/ X/ |
       9 ^5 h& N; G+ c" ^6 U5 \

    - t  A# U1 E# 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):) j. e% ^0 r5 t

    ( w7 q$ k* d9 Bos.fstat(path/file)0 V8 a: f; ]: o7 w# |* U3 L0 X

    3 c0 o( A& ?# J3 E- A8 SReturn 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 ) y# |, T8 b- @% }
    可以放进文档当成附件下载的!

    5 J( U( Y& p  C5 {很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-14 17:20 , Processed in 0.400817 second(s), 64 queries .

    回顶部