QQ登录

只需要一步,快速开始

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

    2 y0 J% r9 F! _& ^5 D( N7 J  Z
    : P. f' o5 ]$ C! yos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作$ s" f1 Q. s$ O3 j$ W; f

    8 T/ K& g7 E3 j: N) N/ y   
    & u9 X" d: {0 i3 [3 U. X2 P4 H
    - S) \# a1 _& E4 _1.文件操作
    8 y4 t! ?; f+ ~  G$ |4 ^" m& l: C7 y; C
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    % \( b) u0 R7 a2 h/ x* x
    $ H0 a' ?0 u# Y) l7 V7 J8 ?, u" t ' K/ c' g) O- x7 k

    & J6 j3 ]! m% }$ a/ G. c+ _import os4 L, z( B: W. G( x+ O

    # y5 a4 ^" ?/ U- Z/ fimport string# h; @4 f( k9 j" E0 F

    9 f. `$ K/ S; k7 \: l2 I   
    7 W/ C& S: b/ `' H' `4 T  |/ M: {1 Q  C  n
    def replace(file, search_for, replace_with):5 `" ]% K2 @+ E( F' R. B

    8 y9 ?: p+ o7 n4 h# f2 S* a- h9 \' g# replace strings in a text file
    5 u7 ~0 T  O6 x. |: v. h; M9 `0 E6 t0 t8 m3 Y5 k" `
       5 m8 H4 }6 g; z$ |/ x; C5 q

    . C' n, o9 S+ I( ]( Uback = os.path.splitext(file)[0] + ".bak"! T! @2 v& R1 b. C- \
    6 Z3 _: L& A9 l% f$ K: R" N' S6 f
    temp = os.path.splitext(file)[0] + ".tmp"6 D$ a# Z) [+ s: z7 Q

    $ A6 ~" M8 k% O' g+ h  M6 H   
    ' o0 W! z, u2 k5 k" s2 U0 P: u; o; Z; k; m1 }
    try:. ?( i3 @8 R& [, r5 L8 C# q5 M9 U& h
    . O8 K. w1 C5 k) A% x
    # remove old temp file, if any" F6 i2 u. e6 c* A
    + O/ f$ d: Y7 g, i) Z
    os.remove(temp)
    + B% _3 t( ~& h* c1 C
      _9 K3 O$ o7 ^3 z- yexcept os.error:. I1 ]# P+ F- e; `# j( i4 L; k* j7 I+ @
    ' Q0 M0 @0 L4 [, h1 q
    pass
    8 r' D! O' y* U7 ~5 S' c! Y- W7 C+ k1 x& u% @  w& B
       
    . K% B9 W& ~4 g# z# G4 W( ^( }0 D3 F$ r+ {& _9 g; ~3 z6 Q1 s
    fi = open(file) #% _$ ]: M* N* L8 Y
    & C( J# L  q- t
    fo = open(temp, "w")        #
    7 M. O! L9 u. c& h4 U
    ! z1 c. B! a" U' O" R" J   
    5 P/ B4 v: o7 h3 t' }2 _0 v, j' d* u0 M' v$ m) K
    for s in fi.readlines():
      U+ f% K6 @9 u  B% f% g( I
    ! ~  ?' X' L& N7 U8 Yfo.write(string.replace(s, search_for, replace_with))
    6 D7 C  Z6 w9 U/ w! X+ s' \0 m; T1 T! [1 P5 P/ w
       - k3 K" r& t" f0 P
    - P! @6 r8 s5 Z( m1 H
    fi.close()7 S) x6 r0 [2 i( d9 h- e
    3 U1 _% I! @8 L$ h9 o; O
    fo.close()3 t; e) N$ j1 D1 k) S" Z) E
    : i- W" B  u$ B! p  M# w3 T
       9 Z% I4 c, {1 c' ^: T! r0 h

    5 |, G# L  n# B; X0 I7 J# w, \try:" W) r# a1 W/ ~. B9 K9 N6 S. W, _

    # Q& G, a4 T# o7 I0 l8 `4 h# remove old backup file, if any
    2 x1 ?+ F* q: Y
    : w  g9 O" o: F0 z) S5 oos.remove(back)3 i* ~( O4 B% E1 q* z) f
    . \( z  h4 F0 X% {5 Z) B' V
    except os.error:
    6 ?- h9 W( R( O7 N" `8 s4 `6 w6 W5 h
    pass$ {/ H: d2 x; X( ]+ I; w1 R
    / |, r. h) c+ B4 \
       
    ' ?  w# R" d- p& U4 s4 I3 }3 {* M' l; b: V. z
    # rename original to backup...0 Q0 a  X: H) s' x9 R

    8 d& }! W: W4 D& S5 |: Aos.rename(file, back)
    2 m. G) c' ^6 X, W( t8 J. _2 @; v! l: Q. \
       
    6 m7 Y- N" _2 s4 h- X
    % I# R4 ?; s4 f" [" T# ...and temporary to original
    # Y; b% O5 P; d" z4 o; |' @% T1 e/ A* P$ f$ ?7 d0 L; S7 \: P
    os.rename(temp, file)  M0 V( |) Q8 v/ G- q: K
    1 X5 G- c( X! C1 P8 |, b
       ' Z  }( H; y+ d
    + z% A/ p7 e1 T. @
    # try it out!5 c+ [/ |+ z* i, n# q
    ; c, T0 k! `0 Y7 Y" s
       
    9 p% ^- ^5 I/ W# R% _
    ) {* ^4 ~  l+ \& y$ y* U: zfile = "c:\samples\sample.txt"
    $ v& K) }' }6 k, Z
    , L; o# V; w& s) O- Z. Q- Q6 `; p& L   
    + U' L, F% T5 G  a1 z/ k
    ( N+ l, D+ b+ ?9 f+ I, ?7 M; Creplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    ' P/ Q: ?' o  r9 ^* |6 C6 C: O! W* V3 j* ~4 Y
    replace(file, "tjena", "hello"): |! d2 Z: ~5 G* {# m; P1 o  P/ M2 j! n
    ( T) ~6 H0 n# G. P0 R) _/ ~
       
    0 N+ L) A& x" q" {7 d- o" G9 g$ N# W0 R  @
    2. 目录操作
    ; J+ d" K) V+ e; g! E' G$ H* W/ g" U
    os 模块包含了许多对目录操作的函数% j; J5 j& F0 ?0 ]. m
    7 A+ S# ^  L1 l$ T9 `7 M
    listdir 函数返回给定目录下的所有文件(包括目录)
    $ |+ j" G- O* w. t2 E3 w
    " C9 k  r& h9 |5 u4 a* e4 t1 u   2 m- [, }+ V" I+ u1 y* ^
    " v5 m) G0 j! J$ p* H
    import os  a6 U8 u9 C  Z

    0 C  G5 r$ V8 }for file in os.listdir("c:\qtest"):
    2 ^. j+ Y8 H4 u4 ]3 ^( @2 H' n$ ]) K% }4 I7 f8 H$ P
    print file: E+ [  V8 V, |4 J
    ' T5 o- s) r4 T# X  p3 x) U
       
    , d6 ~2 [! t' s' }3 z  Z/ [1 M5 G, S. z. z* n$ o
    getdir 获取当前目录2 E5 r& ?7 j' p% w1 s6 i/ d' `

    4 M: E# h9 T1 p; G# B0 G* W1 uchdir 改变当前路径
    $ ^! T6 v* j$ s/ ~% v) j( u6 a! A8 @, z- y! {7 B) G) \
       
    * K8 }4 l7 `$ b8 m  o8 R' q
    4 h: {  E) {3 Z' t4 _% D, G% ~: Ucwd = os.getcwd()
      }  h6 n* h4 L9 q! ~/ Y6 N2 g4 l, ^- s
    print "1", cwd
    $ g7 `8 |1 C4 O  P( N) F9 p. X  d* V+ {( u1 j8 q& M
    # go down
    / C$ l8 R5 w7 h6 {. i# u
    8 O  ~6 m2 s; t2 q( ]/ Hos.chdir("c:\qtest")* }0 L4 ~0 L$ m, h
    : z2 v4 }5 Q5 r
    print "2", os.getcwd()
    & w5 M# n2 D5 M* E4 C* p5 J* z4 e; X4 z! g1 G; J- }3 A9 B
    # go back up
    8 @- M$ K& h0 h% f, Z; K
    " L; d! q% m' S* L, nos.chdir(os.pardir)#返回当前目录的父目录* i" `' F9 x# V8 i5 x% _+ k

    $ r) _' f* _& B9 M% i5 tprint "3", os.getcwd()
    # \7 u; M* Q6 H* c1 M. D! d. V* C( J) Y/ K+ k
       / |: _# r6 f% Y8 \
    : u/ C6 p+ N+ b! X6 N" y) O
    makedirs removedirs 生成和删除目录
    0 I9 c" D# F4 p; A; ]' ]
    2 O9 S3 c7 \- Fmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    , c3 b/ x3 d$ |" f3 A2 h/ t' |+ d( I0 P
       
    5 o$ l" u( n& {; M1 s- F- O4 K: m# O
    import os! O5 p+ R1 P6 {6 f) |; b* H8 {9 m
    " U  n9 Y7 P" X* z
    os.makedirs("c:\\test\\multiple\\levels")# S6 t+ V3 p: `) N: Z1 K. V( ]1 N
    - |. _* Q5 }6 Q
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")$ Y" ]0 d" c( c# ^0 z' p
    : h3 G3 E/ [5 e' H9 t
    fp.write("inspector praline"), ~/ d& q2 t6 F6 H

    ) w& R+ e# {7 j1 [# ?0 {fp.close()0 u! W- y/ q4 d' y8 a* b

    % H7 d" [* T+ L9 o5 j5 G9 \' A. ?# remove the file8 B5 B, R6 v- J6 M% E" Z

    - x3 d( @- ^- E: Y- uos.remove("c:\\test\\multiple\\levels\\file.txt")7 @$ K4 L1 g! s6 B  D! t$ j5 d% m$ c4 O
    . P% E) \. S  H
    # and all empty directories above it
    # t  n) v6 J# f! A% D" W2 [+ q+ z8 X8 \# g
    os.removedirs("c:\\test\\multiple\\levels"): Y$ L( _. p0 G. R, ?' E: W
    " L- k1 a7 l& H' K9 A( p) j
       ' Y) `& _, {9 Q( ]9 k* H+ T2 s
    / A! |1 l/ s6 ~1 ~- r$ ?! _& f0 n
    mkdir 和 rmdir只能处理单级目录操作.
    & F3 _8 t7 X/ `; s
    % R" `7 t2 n- V5 O4 H4 J5 a" V若要删除非空目录, 可使用 shutil模块中的rmtree函数
    " V' W1 M$ Z. [9 d& U* g8 W" L& u
    ' `1 H5 t. ~( }0 ]) B# r# q1 f9 h0 ^   
    # p: o% Q% h; Q3 P# D9 z# ]7 I
    : A$ w- N7 _& {# }  {3. 文件属性的操作
    4 U9 A! R! k# e( I! Q# D" s) r( o2 g/ ]" U9 W9 d
    import os& H0 x* Y% M2 l: D+ I- S

    ) j; G7 c6 x8 Z2 dimport time$ a! R' K/ p' _( d2 v$ \5 q' s

    4 n9 }1 y2 o# u* jfile = 'c:\qtest\editor.pyc'3 C4 i# s2 V9 @( \5 c) y
    % C1 G$ e% m0 U2 `% H+ `) K/ ~
       % w! t5 {" i- {7 g3 l- N  ]. G+ t

    2 S) E0 H& b7 X7 s; est = os.stat(file), d8 E0 I- G) {+ m- |

    3 N& E3 N& b' F; Nprint "state", file
    % [4 k. r4 o" |9 t& r4 V
    7 \3 j( m( D+ c: [7 N   
    0 j! R: c0 \% M: |3 w( W2 q
    1 D4 {6 _9 R& n" ^def dump(st):, B# g6 V6 b$ n3 ]; {7 Z

    7 a, Y7 i- g# B! Y2 l) D) j* pmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st' `% ?- f2 G" c( I/ ~$ ^

    , [: ]# H3 f/ Uprint "- size:", size, "bytes"
    ) Y2 |) v/ `" c) Z9 O( A3 e4 U0 m5 f  J3 y8 O( e( A9 x! Z
    print "- owner:", uid, gid- j3 @# e- I$ U. a. L2 |
    ( T. Y. P% k+ x
    print "- created:", time.ctime(ctime)
    * e5 Q  ~) f! e' P7 h" v, ^
      I4 ^: e  w" A% Kprint "- last accessed:", time.ctime(atime)
    . M8 U5 [4 W) t5 O2 M$ @1 E# {# _& `. M& l- w2 Q6 Y
    print "- last modified:", time.ctime(mtime)* Z# P$ b$ h1 q
    , |" c: G% i1 c: T
    print "- mode:", oct(mode)1 P/ X" W" _8 j! `' w# ]

    $ T0 V* s* _  E1 S& b9 Hprint "- inode/dev:", ino, dev. W3 y: I4 n9 ]4 {& k

    + S; T8 g: J0 x* c) m: i+ q4 u. Q   
    - f6 S; Y, [9 H" J" Z; L
    : v4 M6 q+ D% D$ L9 E! s; `2 P$ T9 ~4 sprint dir(st)
    8 W1 R6 D' l4 Z
    , u0 a+ p! s5 y6 Mprint        
    7 E! u. j3 r* T( `! K1 `* {7 e* _5 U: w% v, n! `" S
    dump(st)5 l) `8 }( _' q$ s7 _

    6 i7 H- N4 b9 y7 e1 s0 E, Y# print
    $ m3 s& A3 A. R* H+ U' S' u) ?) H; ^& q$ i) K
       # z/ P- L4 V: M" S, C

    : J% A+ r; G* E5 ffp = open(file)
    ( g. `/ b: E) B& d1 k9 Z0 U; _; b  f6 m, O) v8 B
    st = os.fstat(fp.fileno())
    . d* f; z+ n2 J9 [( f5 I. k% S- R) c* P2 p% b( T
    print "fstat", file
    . R3 i7 I& e* J. X; y2 w" g5 X' }
    dump(st)
    $ I, ~+ G7 v  U1 @2 {: V
    ) @8 K/ l+ d" T; ]! m! j   1 [$ f: A7 E- g9 K& n& s

    3 F2 M$ F# A& q! [. K$ gremark: 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):! V: G9 S; X; ^0 }

    3 ]8 ?, D7 X' [$ F8 r; Q: t5 Hos.fstat(path/file)
    / j4 c+ y9 v# @  g  X; y# p6 O) w; Z
    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
    4 @0 b; g1 E8 z% Y4 X可以放进文档当成附件下载的!

    1 u6 M$ G0 L" F% w3 V9 v3 p很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-23 05:49 , Processed in 0.478280 second(s), 64 queries .

    回顶部