QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3956|回复: 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
    & q. T% {9 ?5 f6 N" N( X6 ~
    9 O4 S5 S( t) X  K! E4 E7 `
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    , |- J* T: w) E# T
    1 |1 N5 K( H, P" F; o7 R   $ W: k1 I8 x* x( ^6 K5 N# k

    3 p/ W2 k- O9 N9 K& W- N& w  G1.文件操作: z1 \1 `/ H6 [6 e* U
    ' G. `$ M/ t- G& {
    build-in函数 open 实现文件创建, 打开, 修改文件的操作3 M6 H6 }9 X$ i, _; D( h+ c

    & c) m3 N0 b1 h! h7 H
    / y% M! K7 `( v, R" a8 Q: T8 [* P5 f5 i7 s8 p* }+ s- [; P
    import os
    # P# H; v  c3 d& {; x  I  M
    $ o9 R1 Z: y- B. J8 c5 p4 ~4 Gimport string
    * x3 o6 y, @9 F) C. R# `0 M3 w# o% F0 [: G$ r! O
       
    8 S+ x7 F7 W2 H7 ], g/ o4 l; g- Q# H- [8 z) l9 R4 @
    def replace(file, search_for, replace_with):* ~" i$ F5 u" Y$ p' F/ E
    6 X' O1 ]( {8 I
    # replace strings in a text file
    " F3 s. I% b+ j) \  H9 a9 t9 N$ ]0 N
       
    : m& f9 o& Q- O" i$ S5 v! ]2 _& V
    " U& Y  K8 ^5 X+ B1 K& yback = os.path.splitext(file)[0] + ".bak"1 x) m  [) I& ]$ a, [, Y+ E6 Y
    : C" C* q) m8 R6 ~( E1 I# [
    temp = os.path.splitext(file)[0] + ".tmp"/ }  s. w2 S, M  n5 m
    " E  a# x/ V, o% ^" S$ \/ ]* Z
       
    % C) A: [2 @* E: a# v. k
    7 w; s3 D; ~0 M5 r* p- W/ H$ stry:
    3 `+ t$ ~5 W3 U3 x- k# w/ e6 w% i+ t6 P+ |6 i; g4 v" [3 o
    # remove old temp file, if any
    " Z$ D" j  ~7 _9 k- W0 r7 Z/ [- ]6 p0 B& X3 @3 B
    os.remove(temp)
    " S4 r3 _; t. P: T. s
    2 H9 q( Y) Y! |/ M0 E! b- `9 p% ^except os.error:
    7 u0 i: R. z7 z& S
    7 I; d, j7 t, m2 b/ Spass
    5 ~$ ^2 |& I% K$ {# T% j* C  u( v; H1 Q# r
       
    2 x/ v' l* T3 ]- D; V, ^
    3 {8 A, e$ w8 m1 R9 ^  _6 Ufi = open(file) #
    % t2 {& M7 i# L) U6 ?
    0 H7 N* ]! Z5 \fo = open(temp, "w")        #
    7 \. X5 C6 z; [0 Z: J6 F3 a5 e1 |$ K: r; M
       . _& T1 R+ M8 `9 ^0 ~- y4 @

    # e+ T* K1 ]4 Hfor s in fi.readlines():
    * F- n3 }, {% _: J' x7 ?: W( R# D' ^
    fo.write(string.replace(s, search_for, replace_with))  t: _  B' j# n8 f
    / a1 W$ R4 C  u" U
       
    : J& W8 U: i8 ]4 C! S% |2 X% f, E+ z% W. ~$ B7 l' K5 w
    fi.close()- \9 m0 D$ S8 T" G5 |9 K1 |

    * m; {4 n! N/ K8 F0 mfo.close()
    ; X: S. Y- C$ _8 s9 _3 d
    - h2 |- W1 ^; q2 Q6 q+ G   $ u/ Q$ A$ @$ s7 x3 _" O

    & F6 b0 I4 `- _; T: u1 p7 ztry:) k) f" Q( y. Z- h4 L/ V
    0 U+ A" b8 q* m) A! H3 p5 j9 L
    # remove old backup file, if any! T4 \/ a* j5 H$ q9 Z

    * z8 R) i6 E0 i$ qos.remove(back)) h* `& G' E9 I. s/ e! ]

    6 h' G( n" _" p9 p4 I( Oexcept os.error:5 o9 s8 `0 j: B* ~+ A  d  q  x  p
    2 O  r' G3 c# y5 N2 \+ |7 i
    pass
    7 h: ~0 O1 d1 u
    1 a( e9 u% p" h   4 `# M( Y# `- o" _( R6 D

    : [! S# x& W/ H- @* _# rename original to backup...0 @4 X* H+ c# H7 M" E; F

    3 Z* B7 R6 f$ @4 g/ ~os.rename(file, back)
    . ?! s: l) [: |( L5 ~. {; X9 l" |0 F# R: Z! L% a
       
    ' Z' d- V1 @4 r, I3 I( |. `  H5 k- l% q/ {; ^
    # ...and temporary to original0 e3 m# a8 Q# t2 q

    0 p) m$ [+ u1 J; ]os.rename(temp, file)% B0 x2 H- ^! A: q8 Y% C+ ^5 R0 k
    : |, Y2 l/ h8 }2 n1 i# d
       " ~: v: s9 e  \# N! A/ U

    ; F# S+ U. w9 C; y# try it out!
    + g" m0 M( A3 G  P( d! w, M! J" l$ G% M) E
       6 }9 F- u2 _5 `& D

    $ [; ]4 K4 Q7 y/ |4 R) wfile = "c:\samples\sample.txt"( r8 Y! l8 S2 D! _" ^4 b) }1 g
    ' D& U8 T6 E3 X; V1 W  F- S- @
       
    6 x) t% q1 i) Y. y5 ~+ h, V/ [# T. q8 }" p+ q3 A1 n& ~
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena( {! ~" E8 g4 u* q

    . T( L8 B8 y# W7 C+ preplace(file, "tjena", "hello"). {; j; g! P" v
    8 \  G9 A. g( q9 N3 X; I
       
    / ?4 i0 J% i8 o4 k: n# N
    & N! B, M2 y" U& b: @2. 目录操作6 z' m: {( E6 }  X& M3 E8 @

    + U, S9 ^9 y& {" b  |4 pos 模块包含了许多对目录操作的函数9 {- b$ E# p! e& \6 z! y& T

    # P% l8 Y1 A; i. |8 J: t6 D" j& }listdir 函数返回给定目录下的所有文件(包括目录)8 u# X8 A" `( e2 j, N4 m% R( q9 T7 |" t
    5 y; g1 W+ N! T  L
       
    $ D" g$ J5 B# V8 b
    ' }2 H& Y5 h' B' i3 {. k% Gimport os
    + h: b/ L8 _$ S* _/ P. o& G# ^. ~; q- C* E. c
    for file in os.listdir("c:\qtest"):
    5 N# R; }& b" d  d/ C1 ^
    ) u6 T  u  Q% Nprint file: G  x/ W# R0 W8 U. Q6 U
    5 p( k; A8 o: n
       ! s& @2 X/ N, h) ~2 J$ ^7 l3 }

    * k( `) u* ?+ j1 v3 b5 N+ b2 Ygetdir 获取当前目录
      n% n8 B% y/ U6 }) f3 m  p$ e% X3 w, _2 y' Y) s
    chdir 改变当前路径4 O6 _5 S( H( i: _, `
    % {0 l4 B9 S: W/ w' y: T6 d
       + e3 j( g3 }) P" M$ V0 }- ?% q
    3 o( W5 m8 `" l' v" Z/ x' o
    cwd = os.getcwd()
    + H1 k; h0 C  c" t- g8 f) W) h: u; G1 @* z- F+ Q. V4 b0 M
    print "1", cwd
    ! x& d/ p- T* |1 F* X& P' [6 F6 ~( V( Q0 G
    # go down: q0 x- {/ C; |' x, u8 H3 z

      z# H2 d! Q" S6 ^1 W2 v% Mos.chdir("c:\qtest")
    . ^3 D0 K" O1 i: {& g  X
    . n" ^- f) x2 Gprint "2", os.getcwd()
    - t! I- L5 _% ?) B5 ^9 r9 E2 G% w3 I6 p% R4 s/ `2 P; l, L
    # go back up, s/ i1 e5 o; Y

    + \0 s2 }  H) l2 P9 _4 S8 g& M" h) a/ Hos.chdir(os.pardir)#返回当前目录的父目录
    % v8 o- E+ R- ^" [; A' ~; E1 R. S2 n6 U* q2 O
    print "3", os.getcwd()
    , k! H1 l* w( O/ ?; ?  k. Z" X: c. D8 D6 W! z1 [4 f4 Y
       ( x. O) r5 G3 X# o

    ' R/ d+ E" q- A+ n0 O; Kmakedirs removedirs 生成和删除目录
    7 S% ^) Z* P+ M$ @% V$ n; R% x4 g0 f- D
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除. S; R0 y; j/ O1 L& F5 W" F' F. ~) A
    3 e" {  m  {1 L, M  t
       ) m2 K# f4 \5 x. t5 L7 m" V6 R$ h  m

    - }* H. j# q% f4 nimport os4 e; v% Q4 a! l+ `3 v
    : u" U- \5 d+ O  b, X
    os.makedirs("c:\\test\\multiple\\levels")+ l( ^, F/ x' E3 W& P' r: K

    - e# O$ A# ~' H) m7 _7 yfp = open("c:\\test\\multiple\\levels\\file.txt", "w")$ U# T( _% \6 s  I
    - ?1 w) p' T7 I- T+ P
    fp.write("inspector praline")8 @, K9 r( S0 p. B, A. H

    * \. Z; a6 ]7 D( |- D# Nfp.close()
    7 W" q, m4 @4 T7 z4 o
    , J; M) v3 y2 Z) }  f6 k# j# remove the file
    ( ~, Q0 Y* F; `7 q* i# Q# s/ p+ {  f3 b0 j. E) w; H& D4 K& r
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    ! d1 \. {, M4 R" w5 F$ N& o7 c) ]+ w
    " q; B2 k& {: z2 b' |# and all empty directories above it( H: y9 _7 z  A- Q% `
    % |0 I  C$ W% z
    os.removedirs("c:\\test\\multiple\\levels")
    9 f' Q5 }$ Y, |$ h$ H& d
    $ c) ?+ k3 T, X+ l9 L   
    , c" |! u1 j9 Q( m- c' n; r2 i, ~4 n, R+ u8 w! S2 R* J
    mkdir 和 rmdir只能处理单级目录操作.
    # i# Z. g& E  Y0 }9 u& Q$ Q9 j7 o2 Y7 B
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    # u; B; N3 p3 g) Q
    $ y9 e. i0 ~7 I7 W/ k; R$ f   
    8 v% w4 n% R; Q) O5 z; V) Z5 j1 I0 L, z
    3. 文件属性的操作
      k9 z5 [; G  _- e* B: P, Y+ `2 N  B' T) p" Y  I
    import os
    % h7 z1 C3 X, r4 b, ?* |% |. X$ I" Y  ^" @: T6 N% o
    import time
    / y! B- O' [) o. D
    7 T8 A! H. q% Q/ P5 @file = 'c:\qtest\editor.pyc'
    " q2 S* d) t! l
    . m9 L' C% u. g* S+ L6 G   
    0 p! H# m# c' {5 Y5 ~$ n
    0 r. @! B- J' \0 U/ u# {st = os.stat(file)0 m$ k; {4 M* b  Z7 {
    ; t' w1 I& ~+ I
    print "state", file( T& S" j1 H- r& L

    * ?5 j* `( P% J# z! Q5 h: x+ O   " [6 |& B3 y  M9 [# s# Q, p
    3 L3 c/ j9 |* g
    def dump(st):! w) a) }5 |9 X( L+ {" D, r% O

    # `) m3 L" O, M; E5 |6 omode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    9 }  C5 E; X- }; h7 ?- F  O& D
    # {. t6 t8 A0 q5 A  X; Aprint "- size:", size, "bytes"9 m8 u; H, l. W% s  ^
    : f2 [7 W7 B9 n+ g
    print "- owner:", uid, gid
    5 g/ K8 q. @( `$ `/ a; t) N4 O0 ?+ u2 s
    print "- created:", time.ctime(ctime)" g5 ]% N1 p& D( V) n" b
    % d* Y5 L0 A6 B: K& X
    print "- last accessed:", time.ctime(atime)
    / M% r% x/ m4 n7 o& r8 g
    " m5 U3 t/ q: O/ Z5 W( y5 n+ t# `- Rprint "- last modified:", time.ctime(mtime)
    8 [6 [# \2 f& x' ~  k
    4 m) s/ `- A9 {1 n% r; B8 y3 sprint "- mode:", oct(mode); H9 U5 B4 d0 t" R

    # N$ g1 P$ B' {8 m& v5 qprint "- inode/dev:", ino, dev, g& Z" H) z3 B- [& Q

    & h8 L( W0 {: c% m7 b8 U1 U   ) ~9 m& f* K9 d4 q+ K1 z) v
    2 c6 \! Q) S/ p, N. X
    print dir(st)4 i# i5 W; M& O& C

    ( @6 G4 y1 s- O7 ^/ rprint        6 P8 d" Q; p9 F* i! F8 j

    : q/ J8 q, q: ~5 i0 [dump(st)2 h4 |9 u  W; O# I2 N9 S- e
    / R3 o4 e* b1 g- n4 M: j! \7 U
    # print
    ; [; Q: r  b* ]3 q& ^, d- g: A6 R! D6 a
       / U4 f! L$ U! h, k0 A( q( U

    ! C4 w, B# N6 s% b0 Ffp = open(file)
    " P1 W) A2 P. C6 V0 }2 L1 j: j  A8 b+ [8 A
    st = os.fstat(fp.fileno())
    ; E& @! H/ @/ A  C4 Z0 q2 S! k, m- e: Q. D" Y
    print "fstat", file
    ' L9 o2 s5 n! w4 S$ E
    / D" e" {. d  g8 y! j6 wdump(st)
    3 m3 f" z( o$ f+ z9 v, h" i. F- b& x- B4 C2 s- l5 J* a' s6 d
       
    4 F3 T+ H: J0 [) \1 ~- {0 F: C8 D2 D! A3 P' _! c! `+ n7 J& X6 a
    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):
    & x( {& \# |! @; [% |
    ' j2 g9 @# t5 p* }os.fstat(path/file)+ A+ I0 x5 `0 m1 z
    $ f6 @* V3 t- x1 Y3 c
    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 8 P- I9 F  f& ]) e
    可以放进文档当成附件下载的!
    " Q/ [4 @# K. ~1 ~) H' V+ E
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-9 06:10 , Processed in 0.316353 second(s), 66 queries .

    回顶部