QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3853|回复: 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 B$ K' x  u4 w% T% r4 O" C8 u
    + q: @3 ?. ~' R" o0 T
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作( t0 i+ S9 I: l* s5 H* d3 Z

    $ v9 c, s  L4 g! m1 K   ! |$ K0 q; Z5 v: A3 t# [

    / e4 f8 g! m6 L1.文件操作- Y" D: T3 c- w

    * A6 q: e9 g! ~/ X: p, zbuild-in函数 open 实现文件创建, 打开, 修改文件的操作& N5 ~2 D# k1 }: Y% _0 j

    & u8 `( |/ @2 V+ s# E) N/ _6 M, E. | ; T5 h* A$ S8 Q7 u3 J; [
    5 x8 S0 B% p  l+ r9 {1 P. C; k
    import os9 ^6 i5 g$ C$ u

    + I9 m% w: w- E' ~* l* N8 Qimport string
    / H+ l" r7 [. T1 W/ R2 A' X) i
       
    " @  D+ I& o+ _) G# p; A8 L: {3 [8 ^/ }, C8 ?' v
    def replace(file, search_for, replace_with):
    . k/ x% |0 T9 Y* S/ a/ B7 C* D1 i! n) g7 F6 h0 ]
    # replace strings in a text file
    6 q* u  H' F. \0 a# X/ G; r% m& S) ^/ Y/ ~7 b- N" R8 w+ |" E2 o
       
    & D% b" t1 g; X# P1 ?( m7 O0 l5 j2 v/ F2 x( c" ^" s
    back = os.path.splitext(file)[0] + ".bak"$ l9 j- n& y! V7 D

    8 R- ~% }( u" @$ Q! f5 vtemp = os.path.splitext(file)[0] + ".tmp"2 N' a0 ^/ S: N, k; Z9 F: |
    / W8 c' Y- f% y1 V& F2 o/ X
       
    / k* D8 t- ]4 [1 n) B; y8 q
    ; T4 p) a; Q+ _" g8 P5 r5 J- ctry:/ ^* d2 f% }. _4 {

    $ _* p. @8 O* L2 q8 W# remove old temp file, if any
    3 {4 w# f- W' q' G5 B: I( I2 {, L6 X
    4 v& t6 Y- w. _, @6 h$ B# aos.remove(temp)2 s6 I' D. t) z3 w

    8 G( u" G/ T) [6 uexcept os.error:: k; R( u+ Z% p7 v& [& M# o( }1 V2 b  g
    * `) D4 [- G+ @
    pass/ j1 d! s) U4 B5 o0 |* T
    # C9 L- }/ X* f
         Z( T1 j# s0 v, V* K, D

    : p  s/ I$ K. q4 c0 hfi = open(file) #8 L. P6 y) |( s$ P
    8 u2 v; q- U) w5 d; s
    fo = open(temp, "w")        #; I4 S5 r' d' \4 J
    . k# D6 z; N3 W1 a
       
    : ~! h! v* o$ U0 h5 l
    % |& K) p1 W/ I7 d7 B# rfor s in fi.readlines():
    9 v9 \5 E/ a$ V1 ?9 }; ?7 E3 F  Q0 s  N* u
    fo.write(string.replace(s, search_for, replace_with))
    2 A: [7 R( ~1 `& X( b  h) W% b$ k  z; ~! V- ?9 p
       + U5 b/ G, ]5 I& T' A/ e0 h

    8 E$ v9 _8 m* Bfi.close()
    ! x" c. ~* e$ D1 n
    2 r3 W& \# O  K) f! {fo.close()# p3 U; W, F. k1 v3 D% b
    , b5 I, b1 {* v8 C! y: f: e
       
    ( a/ X2 s1 M4 D- t0 D: w4 p# O" h4 I* O4 @+ }, b& e
    try:- e5 t* U0 u1 q( q9 \% [% p

    9 i  n% d  R: V4 S- j# remove old backup file, if any
    0 H& K" m4 W4 X  [3 k, u
    2 u, c! F- T2 U# f. o8 T$ ~/ vos.remove(back)) Y" t$ j! l" T8 v% |3 T' g

    ' T& Y& @! [2 L5 V* _2 lexcept os.error:; H5 q6 y# T# m8 f1 l; b1 v% J& p
    ; C! G% @4 p" q8 F# @; q
    pass
      J: M* X! _/ D! \! ]0 ^$ x- `* Y; `- T/ E- _( u
       
    % ^9 D2 K  T8 L" F+ |( p4 a' @% U3 q# B: E- i
    # rename original to backup...& ^3 |) l- X0 }% O
    % u5 t; B9 s# n4 {- |
    os.rename(file, back)4 e1 q6 [$ z: p

    . m3 g( F, {0 w+ i   + R; Z+ I2 ~0 ~( Q# q

    4 U6 T" i( p- \: T2 g0 S0 [# ...and temporary to original$ ]4 K% W, S9 I  E, {: S

    4 [+ y3 o4 X6 g4 D. L. yos.rename(temp, file)
    ! u0 m4 G: \; |
    # Z4 y5 j7 A' x; j  `" d0 m   ' t. L) S" M, O2 ?
    0 d: J' I# N: s- j" q
    # try it out!6 P3 P; x- Y* p( ?3 X' ^" s
    / |2 f6 h& u6 ^( h$ p& |9 A6 c
       ; C: a* ?0 x% M1 x

    1 O1 W6 x  D/ f" ?  R9 vfile = "c:\samples\sample.txt"
    * {" J" U, S( J0 K9 o  q) j0 l: f0 C! R  q  Y. a
       
    + t" n+ `6 E1 ]
    ) y& @1 Z- t+ T+ S5 Kreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    ( T) }1 S6 ^. G, j: C8 P* ?5 c: ]5 n: E' i9 ^, @' V
    replace(file, "tjena", "hello")4 s, T% O  X' D5 [5 S

    8 i" ^' }7 a8 Z) p* N   
    5 c. o) K7 t4 @2 d8 U3 E* T, i2 p  k% q
    2. 目录操作" n- Q: j' t- A! s+ `! }; {

    8 b8 m, L' [) I3 q. ros 模块包含了许多对目录操作的函数
    ( Q7 V" F9 M. X$ h" r6 T/ V6 |3 L* P& w* t/ v
    listdir 函数返回给定目录下的所有文件(包括目录)- f# O; a* l: Q5 @# X

    - p5 d8 k7 h0 ^   / q2 i" R4 `1 ^* O& s: v6 J$ l4 Q4 c
    & A1 @* G  A% a, E9 b
    import os
    ( \$ ?0 O3 a2 @* [4 d  M  q3 |- ^
    / g, K0 ~- ~+ a0 R6 @5 Ufor file in os.listdir("c:\qtest"):* e  l9 y9 F! K/ n3 \

    # O/ p; \; c/ s3 Y( e$ }print file
    6 J7 h. o7 x$ W0 L
    5 E/ W  q5 l& U8 O   
    7 a4 a) @/ d2 p4 |( v5 _; P* F; v
    * z0 T0 f: X. j2 _getdir 获取当前目录
    , k. }$ e$ ~& k$ s
    & z9 E' D% K# t* U: M7 uchdir 改变当前路径
    # X/ X$ P; t: M7 c# x( E, X9 Z/ k$ }/ C- V1 E
       
    & G/ c" m: R( c2 [% V* M) t0 E5 [: T# T5 }$ g$ y% Z
    cwd = os.getcwd()9 O4 f# T8 \- v+ u

    ) J! T. K- D- V/ |6 oprint "1", cwd
    & V5 W. y) q/ L0 [
    7 I! ]" T3 ]3 q# go down
    / u+ j  @, ^# c, K* Z+ K/ e( K# y5 c
    os.chdir("c:\qtest")1 _$ v# `' O$ d
    2 L& x1 s  B. n" B
    print "2", os.getcwd(). w3 z3 H% d, @; ^7 L* ~
    0 W0 w4 T8 {: J/ {6 Z/ a1 f
    # go back up" X& g" _5 }; W7 b( i! d9 I1 f3 O

    8 u+ {. b* b( c9 `7 u; c/ nos.chdir(os.pardir)#返回当前目录的父目录6 _- E4 k* H! r
    4 I3 L: O4 l' \4 F7 V6 \
    print "3", os.getcwd()
    % T, U5 Y( X& k) @: L% N& u2 t0 M; ~& S
       
    0 [/ A$ u2 ]- ^, m& A! y9 ^. s& Y5 q6 q. |. E( }7 \$ W7 L
    makedirs removedirs 生成和删除目录
    * q& Q0 M/ r4 T
    . v5 ~$ R- }; P2 [# Lmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    # x3 q) f7 X6 v. y4 W5 B. M# B1 I+ v
       $ _: Z. i. `0 A3 E; S- W
    2 h+ b2 p' T7 @
    import os/ C- y$ M/ ?0 V9 Y' G

    . `4 D) S2 w/ O% Z4 Fos.makedirs("c:\\test\\multiple\\levels")/ z5 I0 \: T! [
    6 b; s2 c$ _' e' k, k% M6 m% z
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")3 E' {' i( Z7 [: Z7 u- l

    ) R6 C8 ]! F) x! G% bfp.write("inspector praline")9 X7 E  _5 o: X% Y) k

    " J" s  O2 K' @& R3 c8 c: ^& j! `fp.close()
    5 F1 p& R* E' t9 i8 [
    ( t! A. K; \) g' Z' \# remove the file
    / x9 S0 c) \% H: q& ^8 L; d9 G1 b9 |  D# g' A
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    ! \3 d  }  ^" s1 f4 ?' y
    0 D( A' [% e5 s' V1 n# and all empty directories above it
    4 F0 }- Q! a; }+ ~, C1 w
    0 l, w5 ?" y8 _8 A3 n7 Oos.removedirs("c:\\test\\multiple\\levels")
    % @4 T: X3 v* m$ \! }8 U5 {' n" Q8 s
       9 A+ _' N* C" L: L3 x
    ( P2 {" Q5 f$ y+ p
    mkdir 和 rmdir只能处理单级目录操作.
    5 u+ h8 ~& L8 v+ y+ I# f
    5 Q0 N! \7 d9 M( A若要删除非空目录, 可使用 shutil模块中的rmtree函数0 l! B. i( \3 a% D9 L
    7 ?4 |% d1 w  `4 U) {! j/ }
       
    ; E- p8 V1 T) w5 }8 u5 t2 p0 \* `" x, H
    3. 文件属性的操作" O3 d! l$ n$ X  |5 b
    $ }8 b' R) P  d- |% D
    import os; k. V/ W1 h, ~
    6 t7 v. h6 L2 C+ a
    import time
    4 q+ e8 X3 s- U* r& W1 X# {& D' L5 O, ?/ |! k# f1 W
    file = 'c:\qtest\editor.pyc'. r! f) j& t' \& X, P3 A" y

    9 g4 p$ _' h/ i2 f   
    ; H2 Q+ ]  a. `& p' O
    3 ]4 I& M- F1 K4 y) Z5 F; R2 M) Fst = os.stat(file)
    0 |+ J' K1 C+ _0 ~0 x9 Q( M! C. g! R, E! `, z
    print "state", file+ e1 k9 ]0 L, m( e, c" p7 [/ U

    3 \5 w( r0 _$ o8 p% M( H! i6 i   
    : c7 e0 K& O5 ~! W. c" H0 j  R- Z) l$ s2 L
    def dump(st):" T. k% }/ y3 p6 r2 e/ F  _, ^
    1 j0 j' C5 Z5 a1 X4 _5 J
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st4 m& c: t( u( i  ^; N3 w2 _" @
      V* ~0 e3 q) Y# X
    print "- size:", size, "bytes") i+ h( n. _0 T+ A

    . j* r! B3 w2 {, Q' r" u/ M- ~print "- owner:", uid, gid
    % j) O- Q8 v) d1 o( c' n; o; {8 E* ^6 t9 y* ?
    print "- created:", time.ctime(ctime)
    7 g7 [( \( z) q. z$ m8 t
    * D  }& S  f5 Q( D; ~0 x6 Zprint "- last accessed:", time.ctime(atime)# ~9 p+ P- Y" W$ Q
    " N; w- _* }$ k+ ^: X% G
    print "- last modified:", time.ctime(mtime)9 o' ?% N: j, A. x- h1 r
    6 q9 R- N. ~/ F  `! r9 `3 N
    print "- mode:", oct(mode)
    " U9 e& N+ p% Y. Z$ v* d
    0 [- z) A0 U2 p0 L  ?3 N6 j& Jprint "- inode/dev:", ino, dev
    % A" J) l0 y! |$ k, X
    8 |, ?* b3 e7 ?" B/ y   
    / Q: b3 V6 q) Y) \5 |% R
    . U4 U, z% w% @' Q) {2 B3 [print dir(st)
    4 P8 t: P* O1 V' S3 y) I3 ?4 R0 I. d% Z( F8 C' [, u
    print        : z. ^, I$ m- M; B: k0 m
      u0 e1 h7 S) C) c5 U3 Y
    dump(st)( ~# J$ o& P. `3 m& j5 y

    # W# r3 p% H# ~: w$ X7 r# print9 ~! \) ]) M# L: z
    2 T: f1 y0 q3 z+ j$ v0 K' v
       : _7 d- n9 j. _3 Q$ e

    ( ?4 C+ p) [; R4 `3 j8 a+ Hfp = open(file)
    ) B  O' H/ K4 ]2 p8 U, s) E3 x
    : P3 _9 I7 @: `$ w; [st = os.fstat(fp.fileno())
      {8 m. z& \6 T1 S8 e
    : Q, Z1 [1 j/ A4 W0 ~" r8 ?print "fstat", file# D! V# e8 `" @! }/ `# A

    , h" C. u7 n& \6 X0 y* d5 Udump(st)4 {+ @3 A, v: K; c  l) k
    - |' Z2 O: C' i5 x
       
    * [0 V3 l; ^8 g; @- E1 z
    + L# X* L" H. {5 b) b1 v- L* Nremark: 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):
    0 M# Y9 j# P4 H9 s# }. @2 c& w1 g2 Q4 k
    os.fstat(path/file)" A; K: C; y! R  A
    1 [* B# |4 O* F7 \
    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
    & h6 k. F& l- F9 p, H可以放进文档当成附件下载的!

    ; w; \" c' W* n+ x9 ~$ z很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-12 15:50 , Processed in 0.577192 second(s), 64 queries .

    回顶部