QQ登录

只需要一步,快速开始

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

      i6 l3 D# K, A- s* j1 `4 o# C" s3 ~- V. ^& w- Y
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作; S. h$ H3 O% u: v$ ^

    ) ^6 F& a; h7 p$ _; y   - s3 [6 c% F& |% m8 J

    3 F5 _+ Q  b5 h8 n0 ^1.文件操作* B1 f7 D. `. H: |# H

    3 H, E" E" s" i: obuild-in函数 open 实现文件创建, 打开, 修改文件的操作& W! p6 P3 G2 `) u+ F* S

    : |% x& ~; f+ g$ Z* T$ J$ n ; C6 O! I# [* a

    $ A( O0 _" e! E# r; f4 Wimport os& D% c3 E- q6 A8 h
    & r* [+ ^+ a" u! G* `9 c' l1 G
    import string
    3 [5 F  C" n8 Z; ]& `
    - o# ^; C& c+ D% o) Z: i   ) _  ]  |+ i& s0 h' M' u( u

    # |/ g* W# ^+ `. c: P! Udef replace(file, search_for, replace_with):1 I! u( `" q$ Y9 k' h

    3 B0 D/ b/ k. _$ I/ D* |, ^* s  t# replace strings in a text file! q8 m8 \# E$ c
    5 O) S% [5 d2 e1 D, }
       ) E8 L. G  f0 H8 x* ]  c3 R
      g8 u8 G  h% r/ o" M( ~
    back = os.path.splitext(file)[0] + ".bak". b# J- x& {6 n* {4 q9 K

    : N. [% E) h' k, e2 e3 s5 T( |temp = os.path.splitext(file)[0] + ".tmp"
    9 L/ l! f2 C9 ]
    9 l3 E3 M6 D. n3 T  v4 [9 d/ z   
    8 n5 Y( p$ l2 j" S3 t
    ) m) N3 a2 _' e3 W. ]9 k6 m5 vtry:% f7 f4 R$ D/ x8 t  d1 J4 G4 a
      ^" J: E! k1 o1 [5 Q( }& j" f
    # remove old temp file, if any" b& ]  C* @  Z- G7 U

    - q  [. d/ ?6 F& ros.remove(temp)7 X( N- v# d" m( |
    ) U2 G4 s* U: Z5 l
    except os.error:3 v. c9 ^; w+ O3 Y, x0 k5 A

    ' k3 z4 N! X9 |; w4 `1 epass
    % X2 q& d. q* }+ Q5 H/ }; d& H. k, {$ J# i% R
       
    1 X5 I* _1 l- {1 W* X5 R5 G* N7 y1 o' t0 ?2 Q9 N# }" O
    fi = open(file) #8 E; R# x. q* ?: \! x9 b
    ) _' A9 F$ _+ l- R; `3 y
    fo = open(temp, "w")        #( r7 e3 z' M% ^  H
    3 _  g' ?4 B& ^9 t' i
       
    ) {' x. d3 W; v; G" j7 F
    , ^$ w8 f# y3 W; Cfor s in fi.readlines():
    # n; c& w* @6 @! ]8 S
    $ B9 M# z& R6 {2 afo.write(string.replace(s, search_for, replace_with))
    9 W% J6 ?+ t4 M" y
    9 `; Z( z) `1 I" U; {   $ }  ~, Z6 m5 e% o0 b$ q

    8 _# U! \" w4 y/ pfi.close()1 l3 I# F3 B9 K7 V  r& d* P
    2 ]" D& G2 C+ ^, l
    fo.close()$ w7 b9 m( y5 O. ^; x9 m+ M' ]
    5 }9 r; C/ x# z; V* n+ _) ]
         x4 ^) v- o* W1 l9 ~

    ; t+ R5 k2 d/ Itry:
    ' s+ [; n/ W6 }/ U* ]+ O' ~( T5 h
    0 [& h8 u8 s) `# U, ?0 e% e1 W# remove old backup file, if any
    8 U5 `$ S# k7 t# P4 X3 c" H( O* A5 o/ G
    os.remove(back)
    ( b. s/ F1 k3 g
    . w: k8 [. H& \+ g/ Xexcept os.error:- y' S( T! {3 j" a; ^7 P' y

    7 I0 U/ I2 Q0 \; L& p) U) hpass9 K& ~7 {7 p* f0 _$ f9 v

    / O% r" J6 c; g   5 s! G$ K; n" J" l. N
    4 @7 U0 u: b7 P6 M% n7 q1 j
    # rename original to backup...  p# C4 v5 b6 `: x) r
    4 w% P8 @- K$ X1 k
    os.rename(file, back)
    / e. G! ^: m+ m9 M# Q9 _
    6 V/ N1 K; d/ g. M( Y   
    - S8 m! d; e; E$ D6 h8 L# a
    7 V. A% t5 J& K8 Y# ...and temporary to original" i2 r: o0 |7 h" @! A+ M0 W
    2 R7 y" p! z$ K) V* u7 M
    os.rename(temp, file)
    8 q9 \/ y6 ?3 i- Y# e; k
    , \/ I% G* n' t   . H% L/ b/ ~' f- ]1 q
    / _% m7 c" E$ b- D
    # try it out!
    . B: ^5 `: `; g) Y+ H$ {7 j
    # L, W6 o' g. x   # C3 _) }! g8 m: Z7 p* Q' ^

    & Y, A% t1 h1 `+ h6 Kfile = "c:\samples\sample.txt") |5 a% G) R. h6 O1 V
    4 l, S) A7 l, @( Q9 E' X
       $ z/ L- k# y# o; _+ [# G8 v4 B$ }
    9 u; q0 O0 ]2 K
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena1 t( a! W! z) t! `* E5 l0 `0 L
    , L. z* K6 X  U: I0 c
    replace(file, "tjena", "hello")
    . z; E' D( C! z# ^4 `, D
      w: u. n+ ~9 f. x& \% d" M   
    ; T1 |; F; |5 P4 E- U, [7 u9 t. R* y( H. A  }+ v
    2. 目录操作" u* V7 o: i# L* K
    0 B8 v5 F- Y% u2 t2 E4 e6 e# O* j1 j
    os 模块包含了许多对目录操作的函数
    6 G6 p8 O1 t+ \1 K# L/ X7 r' K/ i" Q* C2 M: k0 m8 x
    listdir 函数返回给定目录下的所有文件(包括目录)
    % G1 q7 T% U8 D
    " V* ^6 u  I. r; c   
    8 x5 u- C! [) f& N! ]
    - n3 i; D" K. n; y  M! dimport os
    - {/ ~6 {, D" q3 l* q% b! ~
    : i. }7 z! h% R3 jfor file in os.listdir("c:\qtest"):
    $ ~: P% Z/ G. o  ^; J& m6 s* X* z: _0 D
    print file
    9 ~6 r, P$ s/ `. f% K
    0 _& q! ]2 e' D  G   5 p8 ^$ I' B6 e6 ?# a/ u3 r

    4 ?; h, [+ X) G4 Vgetdir 获取当前目录# C" ^6 l7 F( Y: o
    " `$ i! D% F2 x+ A, z* F& y" L  W
    chdir 改变当前路径' Q+ Z8 D$ _( ~. a

    4 C# X, Y' F. R" p* l   
    ) P0 F. ~8 C7 f& D: J% [" e+ }
    3 Q& g2 v1 y! z' ycwd = os.getcwd()
    - O& y, ?0 R& `4 |
    6 F3 h5 i0 i# {2 b0 bprint "1", cwd
    ( b$ {/ y, a7 w& o
    6 O0 W8 N- k: g" z# go down
    + Z3 T7 M4 ^( p, Y( R6 v; u
    8 Z. A) e. K- I* y8 S9 `: h: s- ros.chdir("c:\qtest")
      p  E" K: u1 [! X# s. s
    0 P# J4 C  [' F7 E3 nprint "2", os.getcwd()% u2 B7 l4 n& c& f
    * k- m! c$ O) U3 ^3 ^8 k" }
    # go back up
    9 M/ Y( K7 X+ g$ l
    + i, u* e- l6 a* ~$ [6 q. Jos.chdir(os.pardir)#返回当前目录的父目录' [% m$ W# T/ M) G% ]7 U  \2 t
    $ W7 b4 H# l: R+ W" @1 a+ ?
    print "3", os.getcwd()
    9 d; c% z( c$ J) P9 C0 n; ]) M4 |
       ( P, a. c# \9 c$ ~4 x: ?# o

      [/ C* _/ A+ Z# Vmakedirs removedirs 生成和删除目录9 y" `: N7 R* S1 E" H
    & `: H+ t( v  R' |
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除, g6 S; l1 v+ F* Z
    ( f- c6 v! c' o! P; i# ^( T$ `4 b
       
    9 X* f( a" U- e* a3 [. t
    & J+ y( u1 N, m( V% vimport os+ o/ \1 C) s& _/ L* \5 @' ^3 ?

    - U! F) T! U+ F2 K+ z, qos.makedirs("c:\\test\\multiple\\levels")  `6 P7 {! z. G3 n4 ?( D

    ; o3 V4 \5 ^0 {! h: Pfp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    1 l0 t. [# T/ m0 z# D: G8 Q) @" k, @# D
    fp.write("inspector praline")" J1 X: j! B5 m4 k4 D  p( R( _$ E
    6 K3 E7 E4 _* G
    fp.close()
    7 Y! V; n( J6 P4 M$ |/ Z2 Z7 g: h( i' _, D- h, p
    # remove the file/ R0 {- q! W  T2 V2 t
    # s  B6 W& p, ], _% ^
    os.remove("c:\\test\\multiple\\levels\\file.txt"); b1 A, n' l) Q* t8 w7 n: f0 u. z
    : V9 M5 V  C  p7 ^! y7 C- s
    # and all empty directories above it
    9 j: L/ g6 H+ _8 }# k# z# \/ X* ^3 T
    os.removedirs("c:\\test\\multiple\\levels")
    7 |% `& E. S% P  L0 R9 J5 J; _: J
      G% R. a1 m5 L( g   3 d0 W8 N* h: y  x# f: N

    ) X! U0 P& G' K% K$ C% _7 gmkdir 和 rmdir只能处理单级目录操作.
    " W: V) {6 q! I# N6 `3 M0 l6 f
    & T! P! I" f; }4 v若要删除非空目录, 可使用 shutil模块中的rmtree函数0 ?0 Q9 f/ |% F

    ) O1 k' k" s! Z5 ^; o, p   0 l# l0 ~6 J7 U% V! }

    ( `1 j2 S4 d) q4 @1 D: m( @' F" x3. 文件属性的操作/ T6 @& Z- v3 O8 e8 y3 \3 `

    - B  i- y$ t/ \  J' h! J" h, Limport os
    7 x1 @: e9 n9 C8 s' B: V; a
    0 x, O0 T2 t) j( z: aimport time
    : {/ {2 ^1 t. s! }% M& n3 V  o" M8 b
    file = 'c:\qtest\editor.pyc'
    8 E  C5 Y' |. A+ ~! w) k* l, ]2 E- {8 ?3 F& x$ l
       ) ^! J# T4 f0 g1 X2 F3 J0 Y, c. ^

    " L0 X; i5 O3 O3 R7 kst = os.stat(file)
    7 z7 v8 N) o  {9 Z: V- n- P& q0 V+ q2 G$ z9 \8 R3 \1 Q! L/ U
    print "state", file
    / I2 A% f8 L& m& u
    9 w2 I( S5 n9 A7 n; e   
    - L5 E6 h/ j% c" n! W0 ~4 n5 q+ g1 y& g
    def dump(st):
    4 ?; k8 y5 s4 R, S9 t! |
    " P5 i( t# l$ V$ d7 z0 O( I2 Imode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st; N9 l+ T- W/ y" _; `

    ( H9 m( q, r3 Y- c5 u! k8 L8 mprint "- size:", size, "bytes"; ?% R% Z6 Y1 {# E- T+ c$ N( p" {7 i
    : H+ l- V) \3 g# N
    print "- owner:", uid, gid$ p( i/ h! [9 l% n! O7 x" W

    5 q, A/ O/ n' S& d- |3 Sprint "- created:", time.ctime(ctime)5 \! P; U% y: I
    3 s4 H) M; N7 G" G
    print "- last accessed:", time.ctime(atime)& F; U; x# D; r: p
    8 g& O! ~1 e0 y
    print "- last modified:", time.ctime(mtime)9 n& R9 f6 l% D6 l. ]
    8 i* ~; P- U# \5 G2 R- K- T/ I, z: N
    print "- mode:", oct(mode)
    . P: t% v( H5 F' @4 V+ _
    $ H1 Z& x1 j; Q8 f' qprint "- inode/dev:", ino, dev
    ' m. k8 i; p  o; D) s  F
    ! j+ r7 }7 @$ l" @/ E5 v6 U; R   ( R3 e2 p+ U9 ?' F7 e
    & H$ x4 r: i# v- P/ H
    print dir(st)2 F' g& k. w9 A/ @" N

    3 P; E4 |- U2 k  U$ bprint        # l3 ^0 X6 i: {6 |1 ^; u  X3 x

    ! W. N9 J$ v& |" X: |8 Q" Ndump(st)
    . O; x: i6 ?) j$ _) @
    # \. P( d" ?) F; O4 A+ W, y# print
    : |# g7 p' L" P4 h* J5 U5 a
    6 E$ [9 o' J* E1 Z% i, k$ Q1 r   
    6 s: _& G5 y; Z& a9 B6 M
    - G/ \: t) W: |" [! vfp = open(file)
    . X+ w8 q# u  H, ^! ]0 P
    9 G5 Y$ c  O) i# d, \st = os.fstat(fp.fileno())) Z( |4 t- {2 a! T
    6 D2 \! Q3 y7 }0 q5 k+ w) E
    print "fstat", file
    8 E  a+ s. ~; _- f9 F" [: w$ ?8 y! h9 I% r
    dump(st)
    " M& j/ ]4 f, b2 K2 k5 X- S
    6 w% u- \5 l' k  v$ A: h9 O   
    6 U1 Z) }7 o% z0 y% |9 T$ \% N3 Y4 N& M
    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):0 T0 ?" b; a6 f5 I3 b

    " s0 g! Y: W5 h& n' M) g8 [" {% l0 y# wos.fstat(path/file); m, D& x  `+ J% `4 W# Q

    3 r% J4 t1 M, Y: O; LReturn 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
    0 G* E; P+ I: _7 |# J: }可以放进文档当成附件下载的!
    ; j" L5 c; L2 ?* @  |6 J
    很好的建议哈
    回复

    使用道具 举报

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

    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.445688 second(s), 64 queries .

    回顶部