QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3886|回复: 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
    4 W0 R6 p( |( @3 h# H
    : F0 @1 j2 u: b9 E0 q: a# S
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作6 n3 c  j8 }7 }( u7 @0 Z/ Q

    3 F  I* b% I  k3 x3 Z: ~* I   & S7 j; l" m* s4 }- F

    5 ~4 K# E4 m7 @" m: h' M1 X1.文件操作
    : S5 d, P4 a' P  Y- y( @$ h6 q+ Z: q- Y6 }- Q
    build-in函数 open 实现文件创建, 打开, 修改文件的操作5 k7 `. b- m0 R
    " o% h1 I7 @0 P7 |8 S5 d

    8 t4 R7 Y& E2 a! Y: g! h8 y7 e! C& d1 l8 c0 |- D( d4 O
    import os
    4 M! f: K) _7 d2 D2 ], s
    # t* n! y' o" X# i# Limport string2 L3 d5 O* v: b( I

    . ^3 X6 n" I& A; O. s4 \   6 R' e) J  e( H

    0 [' k3 D; g& F0 b& k6 ~def replace(file, search_for, replace_with):
    3 @& B( ~) z" B, A3 S6 N3 ?  p. U* a
    # replace strings in a text file; c8 E! U( a8 j( X/ g

    ; x. p! D" D% a7 E+ z/ S/ L+ a, u' Z2 V   ' T9 H5 H, M8 o2 x

    3 ^7 b: }/ b- E4 ~/ g& Z- E$ Yback = os.path.splitext(file)[0] + ".bak"0 f2 m  h( a' c6 v
    ; ?1 c0 \% b# [1 N: z2 U
    temp = os.path.splitext(file)[0] + ".tmp"( J4 Y4 t! i& o7 u( V

    2 a; a) m+ L; Q0 e7 T2 J! j   9 U% |! g0 |( r7 n6 }

    , R6 c5 a! M3 C' E. rtry:/ v( G: f+ U* v# }; b2 |7 P
    8 e, m& q- `1 f6 o  z
    # remove old temp file, if any& `' z" `( }9 ?( L- J9 W' O
      I/ y$ C* J- X6 L; x( [6 }) }& _
    os.remove(temp)/ G8 F; L( U' i  N$ Q- c' Z9 T

    . q& |5 F+ \6 F5 Q% N; g1 {except os.error:
    / w' L* C) c& V% I! B3 ]' L! R6 O5 |! w$ H7 Q2 M& `
    pass' q6 J* ~7 _1 d- W$ }) d

    7 ~3 A. B* F; z: p* @# o2 @   + P5 _  e0 A: Z0 C1 y* R: U$ w

    9 h( S, e  H' s# Q# Q6 ifi = open(file) #6 E0 S: ?# E; F# F7 P$ P

    + K; R  d) s8 h( {$ E* ?1 N: F( Rfo = open(temp, "w")        #
    " I: B! R& R; {8 u& \3 {
    0 m9 o, l6 m4 C; Q' N   & A7 Z% }3 `# G. L
    ' {% [+ U+ l  k4 }) @
    for s in fi.readlines():
    & P. J- A! M6 T3 P& R" y. W/ _. X2 _' O  `2 t0 a
    fo.write(string.replace(s, search_for, replace_with))
    - r9 [, S7 l* r
    4 e3 ?0 _* h- f   
    : q% T/ ?2 ~9 D6 e- c  N1 X( ]* a& t
    fi.close()
    * n5 B( J3 {8 C& g8 S" o/ [$ N' z, }
    fo.close()
    9 l/ m2 g3 C- K; v( M* ~: F! i' C9 `6 E- k1 V' D' Z! y/ ^- Q
       
    4 Z0 G5 Q' G, ?" P1 |/ v# k0 r2 D9 _& p
    try:' W$ c/ X5 l4 V' h
      g7 u: y& P7 a3 I
    # remove old backup file, if any
    # N* E) n9 t9 t+ M# b& K1 f/ s3 i
    4 m0 w; e. u* j% w! ros.remove(back)4 H7 g1 k$ m4 A5 K( R$ y7 H) d9 U1 Z

    , i% r, ?& U, s* ~9 B( Bexcept os.error:2 B: q2 X5 Y( B: T0 n, w; P
    5 w: [/ u7 ~: ]0 U3 t# w$ J
    pass
      r( e$ ?9 W, G# G0 F2 I7 Q
    1 z' M& c8 f% |" `' V- s   
    5 E& S' v$ d" j7 ]0 q* I8 ~0 F* p& l# N( S% o  ~3 K
    # rename original to backup...0 B! b% F# _2 i( N, L" l

    5 r$ J' n& a+ N4 X3 uos.rename(file, back)0 O/ A( h2 z2 G" h8 A
    ; \8 p8 c  f; l0 ^/ p) O
       % g. ^7 v0 r* _: C1 X
    1 w2 Z8 g, l" E" E" Z+ L6 t3 a
    # ...and temporary to original2 ^% c+ e; H+ O

    1 `5 u0 D1 l) t: qos.rename(temp, file)
    : k$ ~. n0 v& `; y( I% Y3 x3 V! e  U9 S4 I0 G6 K$ {+ V
       ; [& D) e) k% R7 ]

    + J' ^8 n7 _1 L2 j' L0 Z8 |7 h8 f$ n7 m# try it out!- `+ |) [9 f  I
      Z1 ~$ o6 `. m7 j1 G  y
       $ \# g: q  F' S( U! E  x

    1 C1 ^, w- N( j9 j" nfile = "c:\samples\sample.txt"
    + _8 P% Z% Y' ~% B& X+ z& t; u# k
    2 \' n! y5 I% n2 h( F   - q* m  e  I" [; d) n

    ' w3 o$ s0 E5 c# y8 ireplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena, N: F, m9 E- V/ n2 ?7 C8 H- A

    ! A: M) k# Y. Vreplace(file, "tjena", "hello"); U$ [6 S9 G  u6 U5 e+ @7 R! Y
    ) G6 s1 U" h* g! H/ [
       
    : B. n: U& K% f) d* l4 F5 s; G: Y9 D; h  B7 q
    2. 目录操作, i* h6 {" ~! W" M$ }

    5 D; Q- c+ r6 Ros 模块包含了许多对目录操作的函数% T: @1 W6 r( ^6 L

    ( l; u! l: ~6 |6 D; q4 z$ y/ \& G3 Tlistdir 函数返回给定目录下的所有文件(包括目录)
    * }5 |6 v8 o2 b
    / `2 \; k$ k5 s. j4 l# j  \   
    2 v9 B7 E" z* h8 m2 s6 Q( d! ?# K* O  ^( ?; _2 ^8 A
    import os  V; ]7 Z3 N7 }" x8 n6 u( N+ e- L
    ! d5 m) U7 |; k3 _( g- c* F
    for file in os.listdir("c:\qtest"):
    % M* t3 {9 [2 h* N2 f* ~' Z
    0 d. N: h2 o* S' q; h/ Vprint file
    5 ?6 G! T/ y% ^  t' U& d- w
    . W0 V' l' `2 z   
    , {2 U. m, N" o: ]3 Y. b7 i9 O0 ]0 Q4 o9 V( M& D
    getdir 获取当前目录
    & J. l5 y4 P2 J3 J
    1 [9 o; D4 L1 k/ xchdir 改变当前路径
    2 {5 D/ j- y" y0 I: ]
    * g$ z" h. d7 m, N$ R0 N   - ~2 m  x7 [  p0 i, t
    ; l+ N5 b* Y: Y. C6 s  `9 l$ H5 a7 S
    cwd = os.getcwd()2 B# S7 i/ O- [, z, c7 x7 _5 w5 x
    " X: x9 C+ c+ [( e. y+ G
    print "1", cwd) G) t# \- G6 [' P
    - z0 Z% D8 n7 h
    # go down0 l$ M/ D$ @, ?$ p! [
    % m/ i6 T3 f4 K
    os.chdir("c:\qtest")
    / R" s6 T6 K1 t% b, p2 I0 G; Z- s! h/ w; {1 B4 @% z$ ^# F9 o
    print "2", os.getcwd()
    5 J" n2 ], _# k- x
    * X  a3 l7 t5 i# go back up: B9 a9 |! O- S+ ^  F

    $ g, W; J  L9 {6 E+ ~: j8 t* V0 wos.chdir(os.pardir)#返回当前目录的父目录
    9 I( {3 m) I1 {- P1 I, B
    * m4 l& ~2 n6 N8 t& \print "3", os.getcwd()% T" O3 T/ ?7 |4 Y0 I6 L# {8 Z9 n
    : u/ Y. P) j* ^: `" ?& o
       
    & u; V9 G1 b! b' D9 n5 L
    & v0 E% t& c! \makedirs removedirs 生成和删除目录/ O; k1 D5 j: d( e4 o

    % f9 k4 W! P$ g4 x" o8 ~makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除7 |2 I1 C4 v+ s$ u$ y, G2 R
    . J5 Q9 Q, `5 Z; T
       + u6 L9 p4 E* b4 c, m( @
    4 b# `3 `" m6 x
    import os! o6 z0 ?/ W$ b3 l3 Q

    ' N; K; g+ ]1 Ios.makedirs("c:\\test\\multiple\\levels")
    7 u  |" @4 }: s) z4 U9 l0 h+ H& X1 _( \6 b- ^1 k
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    % g  p3 `& C' e. \  L- ]3 w+ Z6 n( Q5 K, q# ~6 z: H
    fp.write("inspector praline")* s9 B, X+ F- g" t$ G
    $ h7 u% a" h& M  H4 {
    fp.close(). V4 x" X7 H, H, F) N. V

    5 k, V. y0 }( X, N, m# remove the file& D7 J7 Y9 b4 M, q4 i3 P
    - e# [) g- t4 ?
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    6 S, H3 Z9 X5 B, o7 H4 e! B+ F2 N) f
    # and all empty directories above it9 L: x. A8 x2 ^, W3 {
    8 ~/ l2 f: }. C: L
    os.removedirs("c:\\test\\multiple\\levels")6 z+ B$ J! F& H

    + G; b$ {2 p0 b6 l) y# G. m   
    - Y3 k" q, j+ u; b3 {( s7 M' e2 v8 u6 J: u1 o! t0 j1 J8 M
    mkdir 和 rmdir只能处理单级目录操作.
    8 v2 J' ~( z' Z1 r" ?% _; }9 g
    ! {4 M- ?* H# j8 I% h若要删除非空目录, 可使用 shutil模块中的rmtree函数
    2 i/ K# S) p' Y; Z* e# C4 X6 A/ I
       
    9 Q' `* F# S* q" f( _  v6 v; p% O7 P# M( B7 F
    3. 文件属性的操作
    + w. v  l- `" l4 X+ j5 F
    ; j6 v% P2 M2 p( u. U0 `+ z7 M3 dimport os
    9 m; e4 \" v* @( _1 H1 P: E4 |; G0 y! f# x1 ]$ N7 _
    import time+ ~& ?- ^5 d* ?+ x% D3 O. _* M4 T

    0 A$ o3 G2 c" I/ ]6 i% s" Kfile = 'c:\qtest\editor.pyc'/ _. z7 y, `( U% C$ X

    5 Q6 }) x# B# b7 v) w$ P   " q7 u( Z* A1 H" J- I8 A) E) t" c

    " l: N' W' |2 _9 j- X3 Rst = os.stat(file)
    ( Q9 k" w2 W: m& p" L$ ^8 Q
    - H( O& p  u  I+ F: W* \print "state", file1 [$ K  h4 h3 }7 N# P

    : Z9 w1 a2 K1 r+ R   
    9 H3 _* ?! C. k3 j; C: D( b( ?* A9 F- B1 n. V
    def dump(st):
    1 f+ Y& o9 a- E' _6 s) I( T) j. |& k: |/ h8 k" Z9 [: H, S
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    - q9 J6 e9 t7 y7 o2 g5 b+ f' C! L& N( S0 J" ^
    print "- size:", size, "bytes"3 ]0 F0 \6 H# r9 F# Z/ N; }7 r

    ( t5 s8 o2 K: B! l6 R" P* nprint "- owner:", uid, gid
    1 n5 O. H) h' z1 S
    , ?( T5 t; D/ j  eprint "- created:", time.ctime(ctime)  f0 K0 u- o3 a! D$ @5 g7 y' ~
    ; b* Y1 @- z! X& L6 c+ [
    print "- last accessed:", time.ctime(atime); ]" C* o/ q7 a1 j; b
    , ~1 l/ E  }1 Y
    print "- last modified:", time.ctime(mtime)
    $ F8 C4 r  j9 X; L3 I& s9 _& e, h% @8 G: u- r% `+ `0 V6 l' d
    print "- mode:", oct(mode)6 C3 L8 S0 m$ e; c: n
      X  E" V. V2 ]: a2 L# ?+ j
    print "- inode/dev:", ino, dev& p$ }3 c* ^1 U9 w+ a2 l

    , @: L) w1 w5 l" U: g" m4 y   ) i) x$ o: }2 m8 C+ {
    ' v+ j2 b; {) B# y, [' B. k1 k' D
    print dir(st)
    ) d# z' w+ _8 F: r9 F8 g, m
    ; @) R2 E' z2 i( M" sprint        2 J: e& ^9 e: z7 S/ Z

    7 P/ E0 l& M+ X0 k2 T7 N+ Xdump(st)
    " u7 S2 M" C2 h5 P$ Z$ a6 M6 g
    . Y% e8 E# h  u+ P# k; Q: e# print9 F. E6 y$ O. [! p. u: [" R: `
    9 R- J. F$ H/ m" H+ @
       
      n  c2 c- b$ R- X# I  t  c8 j0 M  W1 r1 k
    fp = open(file)
    1 u6 o* E, u8 p/ F5 ^1 @( T% C4 ]$ S$ L" ~# F
    st = os.fstat(fp.fileno())
    ) T: f. {; y1 J; I9 E
    - \( o/ G' n! V( ?/ c, `. wprint "fstat", file
    - a* s, y6 ~5 F
    9 r6 G5 [  T$ j6 ~  `dump(st)
    - u/ J# X# {# A& W4 S0 A$ E/ K2 h3 L+ x1 o$ e$ i
       
    $ ]# A: q' A. d0 H
    ( ~1 g- K! ]; n1 Oremark: 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):+ t2 i/ [; v' l! y

    ' @7 m  L- T" `8 K% i6 dos.fstat(path/file)5 ^7 \4 I4 s/ L# L% }' I

    ) K  I7 U4 {) V$ X4 E1 I$ E8 yReturn 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
    + `$ R& l6 T4 Y" `& X4 S# G可以放进文档当成附件下载的!

    0 l+ {' Z; W1 F很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-23 05:36 , Processed in 0.434297 second(s), 67 queries .

    回顶部