QQ登录

只需要一步,快速开始

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

    3 a4 s; l% Y, f( Z- r! T0 f8 s- w
    0 I( n2 A$ F& P& f# {. {* Oos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作( T' i# z# Z. o: Y* p* F

    2 K: f1 F: Q% g   + X3 j2 I$ d* `& ]  Q1 S0 g

    2 o4 _0 j) y8 L7 ]1.文件操作
    $ Y; q* ]' o4 F) `* Z8 B7 o: l. m" a% ~* ]% f
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    # [, t6 Q4 P# V9 c. \1 D3 s" A1 u7 i  R- X

    & d8 n! s4 C7 I. o5 O
    9 \# L- l9 U3 n0 Limport os
      w& \/ y  \0 m2 Q9 `6 n
    6 H: b3 b; g/ R- Z. uimport string0 \- j9 `1 n4 c7 [! v

    ! x/ I5 a* C$ [  S" L) _   
    5 T% [/ p1 l6 o6 G% J: z  Z  n
    0 J/ W! y( t& o5 _2 m6 vdef replace(file, search_for, replace_with):) L& d  z. d/ @) q8 m! D

    1 i( n1 C, O: F  J: Z# replace strings in a text file
    / k2 O. v; |1 z4 Z% b& a3 t  l4 c5 P4 r3 \9 E
       
    : T2 K( w6 d3 ^  q+ p& i' q# ]$ o4 ^1 N; F2 T& K* X
    back = os.path.splitext(file)[0] + ".bak") c8 m) e( ^9 n8 A7 ^. {

    . d, A" T: A- c; }temp = os.path.splitext(file)[0] + ".tmp"% O8 _7 g2 y: t4 B1 @. D9 ^# F
    - D3 h, P. a9 \
       
    , |$ a/ o  p' z5 s0 t
    2 i: h1 D& k& h9 ^) F" Stry:
    $ q5 v4 M3 x2 A% u; c
    $ v& P- N$ E5 K$ n" q# x# remove old temp file, if any  j0 U0 c% r0 D
    ! ^# o6 o( E+ a% }! M
    os.remove(temp)/ Y$ b* R& D/ }* x$ ]2 y; r/ o

    % n* j) l9 _# Y# s& z. N, ~except os.error:
    7 S! e! o: a0 ]+ _: I7 _: n4 F1 j! s  l0 L/ X
    pass. g" Q3 Q4 U7 v$ W
    3 ?: p7 U2 i: W. q6 K. y
       
    * C0 `5 M0 x9 v; o. i# m/ [/ H0 c( d1 d
    fi = open(file) #
    * o( l$ W& N1 _
    0 b4 v* o* i9 B' kfo = open(temp, "w")        #
    7 }1 f: w4 X4 o0 b5 g9 R, l) u& W8 J" p4 Y1 D) F5 Y
       
    ' R4 l0 f& B- h0 R/ j0 M. j7 L9 k9 ]
    for s in fi.readlines():
    5 O" t  ?& ~8 F" V8 \: p) l6 Z1 ?5 f7 B7 J
    fo.write(string.replace(s, search_for, replace_with))- e4 s* z! c1 T6 A0 h
    6 E1 ]" H: l4 u; p
       
    ! j( s8 p# Q/ e  w5 }" {' g1 u  Q1 T
    fi.close()0 s" H8 W+ x4 D* Q0 e

    1 I- B: N! g4 T0 @8 q4 ?8 bfo.close()/ Q' ^  A/ q9 W0 r& ^4 t, e" h
    1 J7 V" }( X3 U% B6 z( y
       
    0 X: b( j) n+ ]: y
    - [' l/ n" b: F% t. q9 dtry:# v; g" l: ]8 ?5 T# g4 i
    , K  g$ ?7 o# J+ {, L4 r5 m3 p0 l
    # remove old backup file, if any9 x5 X/ i# \+ F, h. P; S5 M

    ' P! C" J5 r: r: s  `& [os.remove(back)$ P: m( R- X' r

    6 F- Y' ?2 @8 y& D& R+ w" Sexcept os.error:, w, N! s2 v1 f- Q
    6 _; O& O: A* z5 O" I
    pass# N! P* J; f% H  z/ j' L

    1 v- q3 s9 w, u2 u  j# z   3 A4 x2 g% a; r5 S$ }
    % d$ M6 h/ V3 }6 G% W
    # rename original to backup...; ?9 n4 d. {% q% ?! E! o  A7 j
    : t8 T5 i% ]- u% Q8 Z' F0 ?
    os.rename(file, back)
    . B! v$ a2 ^7 ]+ i3 f
    , W' z$ C6 p9 q   ( x. t; X5 J5 x
    9 A+ M3 |" y0 g* @! ~: Y5 z
    # ...and temporary to original
    " C# @& {! w* J, r9 W/ _6 W# Q! ~- b& D
    os.rename(temp, file)% t0 {7 T' \% r3 |- v

    8 }+ P) O' O1 k   / a& p$ u3 \, v# A
    6 f6 j5 y. Y( E) X  H; k1 _8 k" E. I. Q' l
    # try it out!2 s9 i0 Z. A" w, }/ B1 j9 U
    ' |, r8 ^+ S# Q6 f5 a" I3 q% s
       # d/ x5 ^2 ~- j2 q$ U0 A( l
    3 o" @1 A- s, o5 }
    file = "c:\samples\sample.txt"" H1 C. x* R; s7 o

    ; Q( [: k) X/ N2 E2 v- Z3 d   5 T2 m9 @' t+ o8 p- C) x1 R

    6 ^3 n, {" n6 \1 {; [9 d/ \replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena* l( f4 U4 ~2 q

    6 {5 e. p; b3 C! M7 h. a6 _replace(file, "tjena", "hello")4 a9 W- y7 Q; L4 H/ L

    . C$ D* ^/ s5 @: K3 O: i; O- X   
    & }. P8 H8 H/ o3 w( J) L
    ! {0 S' d' X8 u' s* d3 s" v$ y2. 目录操作/ {7 d% s8 B; ]+ [8 i# X7 L
    0 N" f: ]1 N0 |' I
    os 模块包含了许多对目录操作的函数
    4 T# C& c8 W: C4 i5 j: J- |& Z2 U8 d6 E) U/ X
    listdir 函数返回给定目录下的所有文件(包括目录)/ t& z) s( C8 [  N) E# D8 |

    " l; V* z) M5 w   $ z' i9 O% g( I5 }6 v

    , [" r8 d7 d9 J) {1 d6 c% zimport os
    7 U$ K# l/ F( F( |) E  L6 ^6 E6 b/ ^
    for file in os.listdir("c:\qtest"):
    : N5 X6 A. G) k
    3 r9 w1 I: h7 j# m! ?+ gprint file0 }8 r, E1 ]  H. p& _

    * X: K9 Y4 j3 C4 m3 S5 b3 D; {4 W   9 D0 F, f# I2 s- m6 j# A  k

    ' L5 j3 {) J+ O) \7 h/ o* Cgetdir 获取当前目录6 C' g( j3 }" S( A7 v7 A# T
    2 ?! ~2 O5 h; L7 ~# n2 u" O. B
    chdir 改变当前路径' ^* }! r1 U3 L% E! d& t
    2 j: Y, o/ }( ~9 j% y( o+ x" B0 B+ F
       ' m6 v8 J$ h7 S. h) U2 ^2 E4 ^

    # N: d, f( Y- F% J3 Jcwd = os.getcwd()2 U* M8 v6 @2 H
    7 ?2 ^( E% M8 e  C+ }% B- \2 t
    print "1", cwd
    % |0 a4 a- i7 g8 l# r  \& N
    ' }/ ^5 f( p) H3 j0 n# go down6 {, e( r) \. [2 I8 l5 Y

    2 ?" N4 Z. R; S- ?: Ros.chdir("c:\qtest")
    4 n- D# u2 n1 z# @4 o% k) r& x4 v; c: K0 a4 u0 y* W; Q: w
    print "2", os.getcwd()( Q* J5 z5 e" [1 v

    . x2 F/ E( t3 v9 d! [# go back up
    ( x/ _& W" _* }3 ~. }, _. W0 k* B- U7 J  s6 d
    os.chdir(os.pardir)#返回当前目录的父目录* N0 M( g6 d/ i# t" ?

    2 S& o" H% }/ q+ @9 b' O6 _) |) qprint "3", os.getcwd()2 c, P. v, `1 D2 ?

      g7 o( F+ q0 l7 [% i) f' N( c- i   
    : p" _' k) J) @3 c, y% a) O. V
    : T" B( N" p  C+ v! P' [# Imakedirs removedirs 生成和删除目录
    * L7 A! W/ y4 b7 j7 {% t: a! w: M+ z# ?
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    ; Q8 F6 T* m% `  i) _. ^; Z1 g9 l& g
    8 r$ e7 S8 v6 D. q   
    2 y8 T1 F( r! `
    # A3 w9 C" w* w8 limport os
    - _1 R6 ~3 `) ^2 P( z0 h3 Y9 f
    7 F- e+ x% H2 q( f5 w/ a& cos.makedirs("c:\\test\\multiple\\levels")% l7 `7 K% }2 ~% s% S# ~
    4 U9 c! O1 z) @' q* t! H
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")/ b( {- q4 [3 G9 c: `% [% @3 ^" W
    / M2 _! Z6 c- L# U- M' z
    fp.write("inspector praline")
    2 U$ }( Z+ E4 j+ ^8 b. g
      S- `6 n; ]" L, W; L* N+ u* afp.close()6 Z; l9 k5 F6 ~' S! {! q2 Q

    6 ~  ]2 p8 o5 x# remove the file4 L! ?2 P" d  R' H# R
    ! ~9 r8 X( r7 z
    os.remove("c:\\test\\multiple\\levels\\file.txt")  R8 k6 d2 d3 s% Z% L4 S

    0 ~& a% m9 x& r9 d' e# and all empty directories above it
    2 l. e) e$ S1 E  n9 l" V
    4 v1 N& Q1 u! l/ c4 ?os.removedirs("c:\\test\\multiple\\levels")+ Z! M; I% Y% T3 w, t; S* D" G9 r

    ( |& c+ [" z; d   
    7 k6 o1 ~! Q  g; F- }! C
    2 z% U9 t, s7 s& f8 L) Vmkdir 和 rmdir只能处理单级目录操作.
    6 n4 b7 T, q/ T2 K3 E7 M0 U, [6 g9 p& W! v
    若要删除非空目录, 可使用 shutil模块中的rmtree函数7 W. z( S3 N6 p7 m- c: C
    1 P# y& m' u/ C9 Q
       
    " Y* G' ]/ _" E/ ~0 X8 V+ W% {1 [4 S* x8 v/ U0 f: ?  J9 Y
    3. 文件属性的操作+ W( u/ f& v' w4 W9 ^& m0 ?
    3 G# J$ V" w/ m7 L6 m2 ]! b
    import os
    / `: @& N* P3 {3 ]; D6 l  S& H% z  L
    import time% v. x+ r; H# x9 X
    9 g  r6 p% [' N3 ]! z5 @- }% Z' _
    file = 'c:\qtest\editor.pyc'
    + i0 D: ]9 V% d' W; N( e) H
    1 {2 S' c' F5 u) }   * e3 S" D. ]/ |
    6 G7 @: A8 ?& k1 m
    st = os.stat(file)
    . z5 @5 V; e6 f% \( q, ?1 E- G7 q+ Y$ Z! {$ A/ l! S: ~* E
    print "state", file
    2 _- I" g6 }- M' U6 ]% I1 Q) f
    * q% v  S  t+ I4 T8 ^' p6 v+ V   4 v+ N- Q; P# E* p7 |
    : E$ C. g1 I8 |5 B2 J
    def dump(st):8 |- D7 o# r& V7 b6 v& }- U

    ; c6 g# g5 o+ j+ C6 wmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    8 q  r( d- N/ F1 j$ x% Z' q7 F7 ~) M& K# @
    print "- size:", size, "bytes"
    9 A5 x1 K- S0 Z; H$ f7 J9 Z( p( u* ?- }4 P" v$ ~0 \! ~
    print "- owner:", uid, gid3 k, ], e' k- V% c- F) \& g

    ; K* t! B9 ?' n& d  }print "- created:", time.ctime(ctime)& x: ]+ k: ]; r% ]! y5 R

      G  s( l  [- Dprint "- last accessed:", time.ctime(atime)  q3 z) h% j+ u! X/ ?+ T

    + G8 u8 }9 f! ~! z9 l) G% P9 Eprint "- last modified:", time.ctime(mtime)8 ]7 q$ j9 F' G' W* i& N

    6 ?, y; h9 \( o" @print "- mode:", oct(mode)
    8 s+ V! |: ^, ?/ T- s8 r( V; X4 k6 B, v  F0 e) Y+ I  t
    print "- inode/dev:", ino, dev' n, E4 i3 z% ?3 O$ A5 [
    0 C. R9 x  E/ c/ Z; k6 l$ c* g
       - i- S: _9 ]( e) `/ Y
      I, _8 m- Y4 e, ]. a3 ?1 ?( Z' Y
    print dir(st), \& h& p- \6 E, _" S0 s

    : c! |: W8 V% L* P& E% ^print        
    8 r& }8 J0 x/ `/ @* G7 S# w! A3 t/ y: i. R% o5 u, B
    dump(st)9 b7 \  z7 s3 h7 r; J6 B2 Y

    ; p' M9 k- g+ r  Y# print1 `1 k5 U) U6 u! x7 ]- h7 _8 u
    $ J9 N1 h0 e- f0 r6 j6 I0 H. J9 n& ~  @
       
    - d! {$ f$ a5 k! c
    " V% ~% s( Y" [3 k! ^fp = open(file)
    ; m2 _, ^6 I* p6 ]- [9 m% o( o* u2 ?0 h* \0 }1 k  v
    st = os.fstat(fp.fileno())
    , [% k  ~$ Q, x
    6 O& I* I, [, j6 Sprint "fstat", file
    & M: J+ A! z1 B- F& w; I) c7 r0 U0 Q: j' y, y$ I4 \6 N
    dump(st)
    / ]2 f" n4 Q) @+ X' Z" x+ ~2 }# ^4 I7 s0 Z$ i: d: r
       $ \+ P) U, T% w* U# c  [
    % d! M7 A3 q9 o. v1 S
    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):! o; F9 q  q# J/ z
    8 k1 c/ o; H' ^. X  e
    os.fstat(path/file)( }7 n& K+ N" y! d$ P" H

    " Q8 O) c& X8 S; gReturn 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
    8 x0 E2 @  X6 U* y) l* ]4 d可以放进文档当成附件下载的!
    % U  K  Z% [- r! u8 b9 e9 {) `. N
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 06:48 , Processed in 0.618565 second(s), 63 queries .

    回顶部