QQ登录

只需要一步,快速开始

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

    . Z- @2 @$ m2 b3 V2 D/ p3 E: b  T' a' K8 H* C8 f) r6 ~
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    * i5 m! t& X; R5 b/ |% L: a# K& H3 F7 |  C' `( g/ y
       $ X  R6 U& z' o$ `, y  e( Q: R

    & x1 _1 m# W) E' S& u1.文件操作
    $ j# B; v/ @3 Y: `
    + k; K) r. ]$ Y5 o3 D6 kbuild-in函数 open 实现文件创建, 打开, 修改文件的操作
    * l& x5 N! B, p% y0 L) `# n
    ; a/ n: M7 H0 _. {) ^
    5 i3 j0 M( b# Y4 s3 {  B4 U' n# y( r  ?) y5 Y2 z
    import os
    5 M/ e3 B& H  t1 V/ }% i  j
    9 q- g& ?# D* M' R: P3 }& ?import string
    3 z& o6 D/ _9 M: |! M$ g. h! Y" o' G4 i* T% e* }& Q" e' o" J' m
       
    : A  n. {! M/ x. i) A' y, I9 @5 ?  B1 b/ k& b( I
    def replace(file, search_for, replace_with):7 w, b8 @( t* E. U5 F- {
    ; W3 b# Y4 Q9 V" C0 j
    # replace strings in a text file
    ; k0 N7 L' h- W0 y
    & Q: W9 v- a! L1 C, _: ~5 D   
    , |( |3 m' L0 ^: w  f9 b8 D
    ( v7 t8 t* k+ g9 P$ ?- hback = os.path.splitext(file)[0] + ".bak"( a) H# l) c0 T  x; H
    $ B" A# s1 i: a0 j+ G
    temp = os.path.splitext(file)[0] + ".tmp"
    5 j; n: Z. K: d6 M* u3 H. l1 A+ G
    $ p# o. ?" Q; }$ L   & }4 I1 z! u1 U/ V( D3 U8 p. c6 u
    / o; A( a8 E5 Z; V5 q
    try:
    ; G- E2 b8 l4 I' J2 ]
    ) m" v/ b. V- X- w  V8 b) ^# remove old temp file, if any4 a1 b& g7 N9 ~& V

    ! B* [: U% O, z, ^" v" Nos.remove(temp)2 j( R  j# f" r' S7 R9 ]5 l7 \' m
    , v0 e, V3 O5 E& d3 {1 K8 @5 n
    except os.error:
    6 ^( N) }/ [8 S$ }2 n' w: G; I$ t/ W8 I# t6 Y
    pass5 u" v+ c: }0 K+ _
    3 C5 y, Q, S% z# ~4 ~
       
    9 _7 ^: s4 ?+ D& T1 `
    7 K$ ^8 v2 `$ Qfi = open(file) #7 y* _9 L2 N" ~

    7 i7 X- v& P3 N/ w7 zfo = open(temp, "w")        #
    5 H$ W* [: J! V1 R$ e* y# w# }/ x# p( w9 t
       % z0 ?2 K! k' m$ ^

    " w5 ?0 H7 G1 u/ |9 {for s in fi.readlines():" X; @, I" @- Y2 E$ n# S' y& \
    - a, A# d" G0 ^! t8 c
    fo.write(string.replace(s, search_for, replace_with))) m( b% F0 y; X" D$ y
    , c1 {, y3 M- H
       
    9 u/ J" e2 s3 C7 {9 a/ B6 g/ Y2 T5 e4 @* V
    fi.close()
    , d' a7 R8 n8 N. B7 u% Z
      V# B1 s0 Z# E9 |* K$ ofo.close()
    0 b! h0 D3 K2 w; h3 H( B8 x9 v/ [0 Q# z& F2 g& d8 ?3 v
       & N* c4 T' q+ Z  n9 W- p8 }
    9 P  d- {4 v* I1 S# t0 A
    try:
    6 H2 C$ h7 t) s4 ]" }
    6 A. H- J. r% c3 d8 O# remove old backup file, if any  P! t% }0 [! i  `4 {% w( W& B) k

    + N2 `: j, H  v; z' F$ Hos.remove(back)
    4 \) d" C5 j- _# G9 v. ?; e, Z
      s+ j$ `: T7 `8 x2 t$ w' Texcept os.error:; s: {  J1 K2 e! [9 I

    % e. Z. v1 R4 R8 P+ S7 m* T0 j0 d0 ppass
    . j' |2 \% ~6 h# j' c
    4 n- L( N, o2 A   # W7 @1 P- S# X3 T& d

    ! q: }4 a2 D7 c- Y0 R3 Y  B+ [# rename original to backup...0 E3 ]* X5 V5 \3 g6 p; ?

    . D1 ~' X) i# G' ?* m  r3 ios.rename(file, back)
    ' Q5 Z$ r; Q8 z/ ?5 M. T
    $ t+ w! P' D( R4 R7 @" I- q   2 e3 a: W* B* D4 z: m9 |4 }. I5 ^- T
    9 t7 [! ]0 x) N; _4 }5 O
    # ...and temporary to original
    % {8 r7 S/ t, e0 ~
    . S1 [# q0 ]* `os.rename(temp, file)
    ' |  A# V+ c6 Q1 i# |
    - L. J0 _" F. i, C8 t   
    ' p3 _  X0 j  b9 j8 u- F* F4 e- W8 |: }0 h% j
    # try it out!
    - |- T8 \0 ^+ r
    0 q5 t; G; |4 Y) o$ b/ ~+ }   1 J! A* u  X1 ~4 ?$ A4 I

    & F2 v/ X$ f' D7 F* b2 P  Y9 vfile = "c:\samples\sample.txt"
      \% B. _4 [" K% |
      D( ]+ R2 z1 P2 P: N   
    / T! C& [+ J( U, U. }9 ~* n" M' O. ]. C1 j
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    3 P3 H% c) }) [) C2 o4 u) v0 U$ ^8 @* i) ?( x; r
    replace(file, "tjena", "hello")* _* R' n" @" T8 a8 Z8 H$ [" l

    : C" k* i  E; s0 \   
    # U% V, v' G5 j! @# e# ~/ K* q# @5 j# V2 D$ b  m
    2. 目录操作9 T  W+ e4 s4 M( P

    # k" M$ p9 d. s9 |" b  Oos 模块包含了许多对目录操作的函数
      e( ?% i- j# c9 j6 Q
    / Q+ p9 m+ V+ m. S0 Klistdir 函数返回给定目录下的所有文件(包括目录)  s. h( \1 ~# `: l
    ( q) b% k9 s  S7 i& |) k" g$ i% X
       " t: d) h# F7 P/ X

    , M4 t7 i/ o: z1 @3 Mimport os
    5 a6 B- }) ^5 Y3 \$ R; j
    ' f  z+ [5 }7 R, q* ~5 H* k( qfor file in os.listdir("c:\qtest"):$ u) `1 S1 ^1 Q8 m

    & R0 l2 n6 I( K: \  c7 bprint file
    8 B" M1 R: i' k" P% x- o/ [: k! M$ A$ u
       3 f0 W" m6 F! ^5 K

    8 V* g% H; h4 [0 V4 zgetdir 获取当前目录
    ; e- C8 e. t* ^9 n$ c1 w
    0 _' T/ H( R; A% I1 u3 kchdir 改变当前路径
    ; j* ]7 B1 D- V. Q% C  v" ]
    $ ?4 w8 h: m: D- _3 t$ z4 P   
    " |  O4 F1 [  S3 ?, H
    / X+ ~3 i: |2 o7 v$ z1 Pcwd = os.getcwd(): @1 `4 U1 C& @2 X
    ) t( |7 z: W+ T; O0 ]. ]8 R+ O- y
    print "1", cwd* V3 ~4 g4 {# f3 f
    . P7 z& }5 Y2 h) \
    # go down
    : `- f; V0 X5 T2 W3 r
    7 X; c1 ~* c* N' ^1 `os.chdir("c:\qtest")
    ' r! A8 n2 A4 D2 C6 N; M& M( ?+ e2 e% _% Y" T* Z3 Q; u
    print "2", os.getcwd()3 ~$ c5 F3 I! S$ l6 F5 \0 H7 F
    . I4 i; k+ l. n+ ^, S$ e- _
    # go back up
    $ H/ s6 w: `+ w. x# U, N& `# v
    % [5 j, U/ N' h  oos.chdir(os.pardir)#返回当前目录的父目录
    ) U; _6 n7 u  U' K% ]2 _5 X0 [' q- n- x) [
    print "3", os.getcwd()
    " r2 s7 \  @7 \# q3 _# {
    . {( d. H2 ?9 j5 y   + U& {* S* t* \

    7 V3 R: m, ?% W% l" umakedirs removedirs 生成和删除目录; N; z/ Z+ }2 N6 z7 W
    # b" r: D6 A" d1 X- i! {
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    : N, R! P6 [: H/ w. z0 H& x+ P' g* _- q, x% o; Z
       
    1 e  j1 b7 z, W: Q; W" O$ P
      `0 J  B& n' `9 `0 l; Fimport os
    , `4 x# h) O' n) R  v3 f, u
    * `) S. s. ?) u2 \2 F/ z4 |os.makedirs("c:\\test\\multiple\\levels")- Z6 e1 Z. k1 B# v
    4 t5 e* i: R% {3 ^6 G! e1 h
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")4 v3 i0 C( y- |8 O) ?8 q& Q
    - C+ A" z/ x4 F
    fp.write("inspector praline")
    - d& r, A- }' C/ M
    + g% N  Q3 S0 w6 L! Yfp.close()4 }7 U& \( }. f* j1 a  ]' u

    & o- ~7 [+ @$ m2 Q3 O& d, v# remove the file
    * c1 @# v( x! p* {( e0 C/ J
    + p9 O2 g5 W+ ]os.remove("c:\\test\\multiple\\levels\\file.txt"), F7 {- n0 H2 c
      U( l: u0 q1 O8 [+ S
    # and all empty directories above it
    : Z5 I5 J1 U  \8 R, I6 f/ _. |3 ]  d- p" ?$ r' B  u
    os.removedirs("c:\\test\\multiple\\levels")( L! p5 [; `7 w+ A' w

    3 m& O  b  n7 D9 ^+ j   / W) @5 T: ]" X  k( u

    + O. m7 s3 l, {' Emkdir 和 rmdir只能处理单级目录操作.( T2 U: ?5 B: x$ F1 s# p6 g
    7 n; n1 C! R2 D8 O  x
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    4 ]. P4 f' M$ K$ m8 F! m7 b5 ]5 G3 B0 E1 a: @
       $ ^/ H' u2 f/ D

    ' t, ?% G/ C" h3. 文件属性的操作
    " g8 [- F+ c7 A9 s* p# {% f
    # {9 W% H$ @9 ximport os
    ( o' u, V* l( m4 S# D" A1 L
    $ m: g$ `; q. o: kimport time4 n" t8 ~# a; p$ _) M4 r

    1 x8 a+ D/ I- ?+ ofile = 'c:\qtest\editor.pyc'1 i' g; n! R& U7 j* k% E

    " Q" s4 n  {4 Q5 `0 ~   
    * t% e. b1 w# q' `" m
    + j! c' `" W. est = os.stat(file)* G5 E5 i. }) m: i0 j; t+ _
    9 G) d1 H; s4 Y+ Q& d
    print "state", file, u9 F4 o! f/ O, W
    - \9 D- |2 A/ f# {: y. w# D
       
    3 N4 m( _( j0 \' U3 q* w8 Z
    ( P( \; `) ^3 Gdef dump(st):/ l1 H; j/ o0 q' B1 Q! y8 w4 I
    6 |5 |0 W2 I: Z4 T8 {
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    2 T5 v; {3 o' ~$ |7 y
    / S' `2 M+ I* s7 x! r- n) Rprint "- size:", size, "bytes"
    # Q0 x7 u+ [" C" [( \0 J+ o) C5 Q* X' t$ _* U* q; N  \2 o% c
    print "- owner:", uid, gid
    ( x( T2 K7 j) c  |( t+ J' F
    4 ]4 R  t/ H/ {6 ?print "- created:", time.ctime(ctime)# X( V, H0 E+ w7 b

    . d& D  Y# q+ B! Kprint "- last accessed:", time.ctime(atime)$ [' p( m( F( V0 z) u" c; q* a" P

    0 b- a1 m, w/ Z, A9 q+ u3 `$ @0 bprint "- last modified:", time.ctime(mtime)9 _; V5 l+ B- o* Y" f6 j
      o: _, l* o9 u$ \2 h: g) v" l
    print "- mode:", oct(mode); B) p6 f* c8 ?& W: [: v

    4 C5 V/ S  M. w) w2 rprint "- inode/dev:", ino, dev: ?: j+ O* K; n: r2 b) @

    2 O- }) A# Y3 ?- \   
    % w! x; v# l* G$ V
    0 n1 y4 k/ P; S( c, K; Rprint dir(st): {5 Y8 H' {6 h2 _$ _0 J) M
    6 c  s* L/ A0 B. e4 H/ n3 C6 W
    print        
    + \% T1 w5 r' D0 B- F& ^1 v) s' n% A! t# c0 v7 p
    dump(st)
    : |4 q; C; P1 Z) ^# Z  r* {; N- O7 o' D) V, g1 k  }7 d
    # print
    ) f3 t: ?4 f6 n8 w
    * k/ R* ~$ z2 [) e. y+ v   
    2 ]0 W# u% Q+ H  y( u3 x! j1 ^/ G" H: |2 R
    fp = open(file), V1 `9 U6 s5 P" S

    " y( I) @+ w; X: L0 }" dst = os.fstat(fp.fileno())
    ; ?4 h. a* x* j/ g9 m# {
    % w6 K7 o4 r* Y: g* \print "fstat", file
    ! T& \. k$ f/ m) d" Q& S9 W. L, G. K+ o9 W% }! H- g
    dump(st)2 k* W8 n- O' [4 F
    . W* x( F  }. [6 K! L! x# l2 t- h! q
       2 d" C% K1 N# S

    ; _) h" X5 l& K; c- ^9 Premark: 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):
    . P- U' D) m7 b
    + l. x" I0 v8 h) r2 }  m0 ios.fstat(path/file)3 W: ]% D4 k4 r/ U3 ~, e
    + W+ V( U) C: |( a- Y! M) i
    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
    ) _! M( u. \' @可以放进文档当成附件下载的!
    ; s$ _: J7 C3 z4 H
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-16 09:28 , Processed in 0.450612 second(s), 67 queries .

    回顶部