QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3854|回复: 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 r1 ?0 x' |$ k" P! w7 W8 V+ u' p; _

    6 U* `. m2 `* {6 ^& t/ c% Ros 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    ' E, B2 j3 s0 d% q1 f2 }7 a, M- I" z
       
    , ~: R  X: A+ _# D4 v+ e6 c; X: v* z, L( z! \8 B
    1.文件操作
    0 y/ P) \9 U8 }$ V& U7 t1 ^2 X6 y+ U" B) }  D3 h! m* c$ ]& j! |
    build-in函数 open 实现文件创建, 打开, 修改文件的操作% {7 l  g/ d) A* |% y; s# N" [3 g! e$ ?
    + v0 `2 B6 t; u" I$ {8 S5 K6 x
    , i7 O" B4 ^  u: Z

    . J7 a( a+ d- @3 y$ r. `. B5 c# n$ kimport os; p' T# a4 ?5 c0 [' f5 [2 B( P
    & j8 [+ I9 o( _" Q3 V7 E
    import string
    $ C( @3 R- s* S
    ! b9 U3 J) Q$ [8 X% ~   # H. G1 R1 C- \# |2 R6 x, T" E  W7 B

    1 M8 [& \. m4 @def replace(file, search_for, replace_with):% K9 h, Q. A' b
    9 f" ~; P- A0 F3 U
    # replace strings in a text file1 r% L4 q/ p6 B! p5 o* h4 [* p5 r

    3 `, Z; I/ @% Q/ c' d0 a5 s- [5 r  q   
    $ m! h( R8 n4 r' X5 l  O8 {
    ( S. Y9 i- S. D  Pback = os.path.splitext(file)[0] + ".bak"3 A( p0 M, G% \0 w+ M
    ) Q+ ^) m2 y( H' d7 X' R
    temp = os.path.splitext(file)[0] + ".tmp"/ D4 E3 l2 ?7 T3 B3 n  `. M2 ^

    9 e' U8 q4 t8 x& D3 J; ~& D   
    ( M9 o% l" ^7 f: g3 Q' c( G! m5 J) B7 X  N2 O! C
    try:
    ! q9 k. ^% x' L. n. p1 ]6 F0 L. e: p
    * Q9 R# I: Q* J6 l- K8 L4 X# remove old temp file, if any% A+ j3 h" G0 B- Y$ ], g. y8 V

      S" ~$ i/ p  T0 ros.remove(temp)  R0 B5 L  ^' L% x. V' h  ?
    * n- ]+ f$ E7 a1 U
    except os.error:
    # v0 N/ c2 j8 P( D9 U
    : h; o" m4 e: v  {. bpass
    8 X( s7 z( R% C. W; h/ s
    5 i: S; g8 c# |" H  z$ h   
    % ^# z  Y' m2 l$ g2 _3 X5 I" {: l* r, n# z3 H
    fi = open(file) #- ?' t% \' q8 P% U3 \' ~7 L

    & Y: O7 s8 U; W" a2 s9 @fo = open(temp, "w")        #
    # d- _# P, Y3 A  r5 B! j  _) s  U2 `! ^) V6 D2 g
       # D2 ^8 e& E2 m' k

    6 u1 _) g7 s: D  e& gfor s in fi.readlines():6 Q: m/ V8 @9 Y9 `7 e; T- N4 Q

    ; o. g9 m5 X4 efo.write(string.replace(s, search_for, replace_with))) Q% t0 V! ?( B9 e- ~% i& F
    ) H& y, ?) C6 _' j# V' L6 k4 b- V
       / {8 h* g, g3 o; F2 K# V

    ' u7 k1 ^) h0 q4 I- v+ Yfi.close()
    0 v3 H0 f, X3 y7 I1 ]" H3 ?& o) k1 l1 s) y" s
    fo.close()
    / H8 D, b+ h5 h6 C4 v% K6 ^+ r! ^7 I( X$ Z2 X
       
    ; c% z1 N9 S8 K/ q
    2 p  o* ~, W, J/ ?' utry:* q( T! q) O8 B
    ' ^# j$ ^2 ^9 V5 j
    # remove old backup file, if any5 x( Y5 C- a" ]: o0 W' c6 s( W
    1 r# B2 k) Q9 N
    os.remove(back)% H( s$ X7 O  }. T
    & J  c: o. |. W; ^2 M
    except os.error:
    / G5 U8 A& h' l: y. H' {  C. V1 b2 v+ g  P6 N0 A
    pass; m  y# T! U" [# O

    " N+ z' C  ^4 o# |/ t& z7 F6 j   9 X) U: K3 }6 r8 f% I

    ' \5 }/ f9 T  A6 T/ @# rename original to backup...7 T; l2 l+ p9 Q7 g
    ! Q* ]4 R1 Q  V8 f/ m2 L
    os.rename(file, back)
    0 l& e4 u- ]; q7 D- Y+ }( z* m) M6 v8 s7 S/ [& ~
       & A6 N+ u7 H: q9 c/ F& F/ C* }: b, c

    & c' [; O1 e+ |5 X1 R4 u: L# ...and temporary to original. F$ ?4 z+ {* v' C3 `: w

    , [9 \  U! l2 O8 hos.rename(temp, file)
    / l" Z# \9 u0 l2 G& J# p" b. I. H- j. j3 f# r
       
    - p& P7 i; J7 j# D/ `' h0 q" X
    4 W. q& i* T. y: c( l( X* c" v# try it out!
    6 {+ b+ I0 r0 h
    ) e5 ^9 J" ^8 r7 T, b; T   
    % w8 I0 g2 ~$ o& `+ L  r0 w" V; y# K7 @9 B8 x0 K  k
    file = "c:\samples\sample.txt"0 F& \% P6 H" l
    , E8 r: \* s3 H" x1 J
       
    ) I; W( B" h9 |' ^/ U9 d; @# b, c  [1 G  F, ?; [( h
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    1 M7 z  V9 x' U; s# E
    . S: m% c3 |( [9 n5 a0 Mreplace(file, "tjena", "hello")0 \; O; Z$ R, n% O

    ' q& [% b# [6 P5 R0 W8 }* M+ c   
    & [" s8 G* P6 S9 K. ~8 G; n. J
    ; v/ x$ b) f" d) k: h7 a; \2. 目录操作
    # u" d8 z- }( J8 U9 E
    : R2 v" k! L/ o% _3 _os 模块包含了许多对目录操作的函数
    - n% k: ^9 U7 n) [3 r/ M+ H& i0 J) C
    ; N& H$ j4 B3 }3 Z4 y0 L. slistdir 函数返回给定目录下的所有文件(包括目录)) u" q/ h1 z# q$ z, z, ~; H  m

    9 Y1 j7 v7 o1 O) A, v) z   
    - F4 N" q  d' b1 V" O( F' _5 U' f& N  q) A2 H: A) Y
    import os
    . \  I+ i0 s, ~& E4 `! _9 B$ F5 j) z9 o
    for file in os.listdir("c:\qtest"):# c3 ~9 d& G- s: t. e* a/ y

    6 _4 |( I# \8 U9 ]2 W" B4 }print file
    # x. z, R: Y6 Q3 e1 W) E0 f: d( U7 _- C0 h2 L: i
       
    $ R. |& [" i' K6 v' H
    ' A2 l' c& G# ?2 bgetdir 获取当前目录1 c( x1 O+ t7 D5 {$ B- W
    4 u7 u/ A& J) b) r- i
    chdir 改变当前路径$ Z- [# t8 m, s& v- C0 E9 V

      k9 ~. f7 Q9 I: y  \5 k  m   , D; Z0 u  q* J) z! p

    ! u. s6 Q& Y( Scwd = os.getcwd()# S. I3 C2 F) g% G( f

    1 u3 D1 B; ~( |1 n) C! I  ?( Lprint "1", cwd
    - W  p  g2 e2 Y9 B* ^+ i7 l/ |+ |$ ?0 o) C1 X
    # go down6 j9 t( K* X9 G% N( A. {7 F( l

    ) p+ d3 r2 z8 [4 C4 G, S2 ^& L5 K  Hos.chdir("c:\qtest")
    / H, ]2 `+ m% s. X( k: }; H6 N2 [( u8 z. p( O8 d0 d( \
    print "2", os.getcwd()" M/ }) F) B' u, P1 U* k

    1 x0 T: ]6 a$ R, w% k# go back up
      k/ F9 @# V: l8 j
    * h* J, t( X4 j5 s0 Pos.chdir(os.pardir)#返回当前目录的父目录: t% s4 i3 g. ~! D8 q6 B

    * T) X. x) _) m1 {% {# s. |  A3 fprint "3", os.getcwd(): b* K8 q9 l! [. p$ o

    9 j' ?# E/ g( h$ Q' n, ]2 J% Y% v   
    ' L! O, n' S. `& r9 t4 Y4 b
    8 `; ]% q* w- U, z5 S5 [7 C. mmakedirs removedirs 生成和删除目录, ~: u/ {4 Q/ J3 |# R$ Y

    / r8 ]6 j3 c" E: C( dmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    9 V( v' r3 Y; u) ?. ?/ K- E4 g4 o& k0 D* B3 C2 [
       
    # k) g: v" X0 i; M& }8 |
    7 t! {) a8 o7 G1 ~import os; @& g8 ]) U  F/ i3 u, |

    / v* I2 ?+ @& h( A0 E5 cos.makedirs("c:\\test\\multiple\\levels")
    / e, S- g7 M6 f  e+ y6 N
    / j8 {1 q# X9 Y: ~$ X0 rfp = open("c:\\test\\multiple\\levels\\file.txt", "w")) L& L( M  ]  }( x8 I
    + g6 Q" _* y* g% b/ [  J
    fp.write("inspector praline")
    0 x0 h$ X) I+ z5 q7 p" r
    5 j3 h/ U" f7 Q/ J( l5 e0 S) qfp.close()- y. H$ s& Z+ T. l9 i4 ?8 }

    - R6 ^4 Q9 q$ J2 K# remove the file: Y" I1 m  [2 o' ?4 R. b; p" m' f5 [

    / u: `- C/ W8 d: V8 k2 w; m8 los.remove("c:\\test\\multiple\\levels\\file.txt")5 _" q5 t5 s$ B9 b# ?9 m7 V8 R
    7 d, m( F2 _0 p  \
    # and all empty directories above it
    5 U. {) f, F! d) S. k4 l" S7 r8 f
    / R5 C, Y( Z" h8 R  Y" B; Eos.removedirs("c:\\test\\multiple\\levels")# e0 e; |* r, c; I' o+ C

    2 U! E3 L; Q  @4 @   
    1 m1 t  }/ y& t+ G- D0 S) Q4 `8 P7 w5 b
    mkdir 和 rmdir只能处理单级目录操作., H$ \9 r7 @2 s0 N4 ?
    * d  F, b1 C. @" C( o1 T
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    7 m1 w3 Z  ~# ~( Y7 N
    & Z3 M- v' H' T8 L   8 }7 b3 P# u; ~! ?+ L/ A

    ' t8 c$ C  a  `) t8 V) f3. 文件属性的操作
    4 |5 A4 W/ C& ^0 @  Y1 ?; f" T3 s
    & ?" W4 L$ @$ L: S$ B, Dimport os
    : l! J9 ~- X' w2 y
    / J$ O# i/ T) |9 eimport time, u. y4 S( d' B: k( d
    5 X$ ?% ?8 z- s2 O& t' P
    file = 'c:\qtest\editor.pyc'1 V$ U1 J4 k- l2 d+ X
    * J# \  H9 a# r7 P# N* x
       # Q) [. Q+ P9 O  C' n. i( _
    ! E1 v6 V$ l' Q
    st = os.stat(file)
    ! t5 }$ P, }' t0 R# x) C! W
    ' P. _1 \$ x: }' {+ P2 sprint "state", file4 Y; L$ S$ N) N6 Z( s3 Y2 m: n
    5 t: k9 K; m2 b8 f4 _* p6 u! y: ^
       
    $ A, ]+ ^; l8 M; W! `5 f/ _/ p  B
    def dump(st):
    0 i  X1 z$ y. A) E/ w& I$ {9 `& ?8 C9 a0 h
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st& b" L; k: V3 W! ^5 \

    % t( W. W$ B$ lprint "- size:", size, "bytes"9 O% L& E; ^$ ^$ H

    ) [7 G& B2 L: H1 \7 h- p' k; Rprint "- owner:", uid, gid
    " _6 b4 ]$ ~  G7 a& r5 T8 E9 z* [  l
    8 |! }6 M5 @2 V& J! Xprint "- created:", time.ctime(ctime)9 ^& h! U0 Z% s  D4 k

    + Y- N9 K8 h1 z& }( |% P+ K8 B  L# Aprint "- last accessed:", time.ctime(atime)4 F8 [8 a# n# M% D7 _0 {. D  h
    * }7 V" ?$ _" Y: W% q7 S
    print "- last modified:", time.ctime(mtime)
    - ]2 W( L( e( `0 v! A2 U
    ' U" k2 |1 s6 K# Zprint "- mode:", oct(mode)
    + R2 Y& W& h# R0 W$ u
    : X( @! e. n6 W2 d, Yprint "- inode/dev:", ino, dev% q3 s9 u+ Y6 H; v' o
    . U8 q' o6 m+ `5 B
       
    ( g6 E* q' [! q1 l. j" Q, E! w5 I6 B; e* ~' |
    print dir(st)3 o, B  ~$ s: Y# `

    2 |8 `. y$ ^# z/ f$ Gprint        
    # I+ r( ]( [- x1 P
    ) ^* N- B  l! \% _( t! p5 {dump(st); C2 Q( Y, M3 z& k$ ~
    ! v% Q! Y& |  y
    # print
    2 w' \1 I/ ]0 ]& n1 B; @5 O7 t9 o4 I7 f9 |! Q" a
       # k- n9 s9 `+ [1 ~

    1 N2 |3 Y/ E2 F% d; ~fp = open(file)
    ; ^. O4 B5 R+ m
    6 O' F( I! b' V& N2 R( Qst = os.fstat(fp.fileno())
    . S, ]- [" B0 w" C. d! S4 r/ Y
    & g- R# v3 l% P2 u" vprint "fstat", file
    . n) M1 v2 e* Q  S7 R
    : S4 o# z6 M, z  ]% F( [9 rdump(st)
    . Y6 S$ u4 `% \! W1 |& L9 s' d. J% r/ g, l) M/ Y% [9 s
       
    - z8 v6 ]+ ~/ }
    7 _/ h6 v, L) |/ T! H/ Fremark: 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):% q! _8 d/ `# Y: L0 q! e5 \; X5 P  ^* \
    $ u. Y1 A- Y0 c: O& {# Y
    os.fstat(path/file): h) W* `0 ^8 e  o& H0 g

    4 w  G6 n: @, N8 b2 g: ^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 3 |4 V) [4 @3 u4 z
    可以放进文档当成附件下载的!

    ) \6 W) R0 A" ?% e很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-14 03:54 , Processed in 0.395100 second(s), 64 queries .

    回顶部