. J1 ]+ a: q* A& L. d v: N 3 B- m8 Z/ \4 Q& i% f7 I* E, P0 }4 n$ n" n5 a
for s in fi.readlines(): 3 ?5 _( R/ f3 T9 i# d1 q8 g+ ~- x W- Z. y. G0 Q% }
fo.write(string.replace(s, search_for, replace_with)) + k4 U h5 x P3 @8 Y3 s3 U z/ u' Q" W4 F* E
( p7 w2 m" ?5 l/ a8 h' y ; [: Y* F8 }3 d# \5 T4 C$ t, R0 @+ Xfi.close() 5 G! s1 i; J4 w( c4 V 2 q. h5 y9 S! c; Rfo.close() + a* l* i- @) D. g m( T$ W/ U, c7 G6 h( Q, Q ( |) E/ t4 u. k/ u8 x 2 [% X) G4 @2 t4 S% Gtry:! v8 C1 _# B& b
' k k: }! L) _# remove old backup file, if any3 j# H4 k3 f `
; C- W# w/ g. Z3 o- n b0 g2 Mos.remove(back) 4 f5 f q2 C1 H3 g + ?) Z! t5 m" Q$ J# U) `1 i3 ^, Pexcept os.error:' i, x A2 _( t$ L# d( z0 P
9 G# r% w! g# |9 p3 o+ f6 p
pass - H1 S7 i4 m8 P: i$ M ' E; B: Y# v6 {4 @; \ 0 P4 A* s) y' p" P9 e0 @6 o7 s1 R; e6 b% E" Q! k
# rename original to backup... $ A/ {7 T. w/ p2 y0 e4 y5 O. M0 R/ R: j% t+ D( S/ m. ?$ m7 f2 P
os.rename(file, back). Q! ]2 e$ y" ^! m8 w" K. S
$ p; K% S; Y i ; n' P) m5 `& R' K4 }% w) I. V# L _: k* J
# ...and temporary to original 2 B n- w" U4 L' U/ {. p, f# d/ W: V8 ]7 Z$ X; r- p0 t2 L6 l; h
os.rename(temp, file)( k2 _) p5 V* [& K, D
+ |3 `7 ]! l, q% d6 Q" v# q
1 U) x1 a; w; k8 b
9 r. e' J0 v, ]' |/ t* Z# try it out! / v* t! T( @4 H+ g* x7 I6 y; w8 |; v1 d, p& e% ~ D
9 R1 M+ ^7 B1 r( l; I3 L+ Q H$ @# `1 K% O$ e6 h
file = "c:\samples\sample.txt" . L# W6 `- D' u/ F4 O2 l. ^) e: G5 _: w
$ n- J9 S7 p6 w! T6 j6 J! U; F" H% n2 T$ U
replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena1 J5 I: n4 H; Q& Q' r
# R, ?7 c* E8 g8 V9 A+ M
replace(file, "tjena", "hello") ! X4 O: x3 \* d0 _6 X0 W7 a! u e- x4 m, |4 p5 l) g) e
& \; S% ^4 T# k* D5 Z & y/ y1 _0 M7 s6 l, C# }* a& ]" |2. 目录操作7 k- |' [; ~; N. @" ~
- u1 s. `: p- r* i# @
os 模块包含了许多对目录操作的函数 : I+ ~+ v7 \' _! g, X7 K7 D 3 P- \7 e5 J* O' Y* Q7 klistdir 函数返回给定目录下的所有文件(包括目录)3 C' ], s1 v$ N0 B: J" \
/ q( k0 h9 N4 C% {" B5 ? 7 P$ x4 w7 N7 K1 f. u! o$ D- |- |: _' Y: k: h) L
import os x& J) i! T* l0 t2 n
& L9 q3 |8 z" T1 Lfor file in os.listdir("c:\qtest"):9 [ q# m5 v2 z$ g `/ s
- Q9 t7 ~, ^& o* w; V# U% Nprint file ' F7 z7 {! O' A5 a! z0 k6 g3 f6 t! p. r) j! ^$ W C" s d) w$ O
5 I4 x) @$ q, I3 z; L5 i
5 N* s7 z3 T h1 K7 d5 b/ u
getdir 获取当前目录9 l+ U; ~5 l! u0 Y3 E! v$ r
- ] d! |; u3 _1 ], g8 n y
chdir 改变当前路径$ Q! {6 y# W2 a h% w
" D2 Z( _' P0 Q, m# @ 8 C( \- E' G% F. q# w( d' P6 g% Z- L$ W @
cwd = os.getcwd()5 [" m' y, k3 w2 {; @/ R
1 ]; d) i1 _; Bprint "1", cwd8 d; B C* y3 r( x
- z, f& b1 y6 S. K
# go down # s% A+ `1 j4 `+ T3 Y* m6 ?& Q # \9 ^$ S4 y9 H0 t5 V% n$ k2 s0 Q9 \os.chdir("c:\qtest")% u: x6 Y2 ]# M
- G: A# \. x, V+ k$ r$ Y2 W
print "2", os.getcwd() 9 T4 J% V- t1 J 7 n7 Y. a4 k! ^, E+ I4 c# go back up 6 b2 d8 {' B6 w7 i; I, _0 C, b# ]/ r) b# J1 f. W
os.chdir(os.pardir)#返回当前目录的父目录 ' [7 j7 p' t2 a) t; `. ~ 1 k! v& r& V I' A: q7 l8 dprint "3", os.getcwd() : Z3 L; L$ y! s" H* w 8 s2 Q0 e6 I7 {7 \* | * m* w# \8 P }: A0 z$ A0 @
6 I2 |1 v5 h' g \- [$ u u( ?3 }/ u
makedirs removedirs 生成和删除目录 - M0 Z' Y; q+ `6 B F 6 s9 U6 `( ]' x3 K& K' k* fmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除6 w% M% P3 D. s9 _) C
& F9 E$ h" D6 @6 T# m
6 R+ `% l3 [; z' d% \+ \# m: z) k |( c& s
import os ) i/ ?8 w. {; m% P) q) O& n4 O* M" g# u5 o/ f- |
os.makedirs("c:\\test\\multiple\\levels")& f# ~+ O/ K) x9 z# ?* k q$ ]! Q& P
! ~# W- K+ r3 @1 h- p3 {% t$ t+ ofp = open("c:\\test\\multiple\\levels\\file.txt", "w") 1 A, c% F0 W( v, L # _: I8 C/ z- W2 N! `$ g kfp.write("inspector praline") / y2 V. b, D8 b1 q4 B4 j1 t ) {; L, J' c2 H/ sfp.close()4 b; b6 N) ]1 p) I* L
" y \# P3 G9 n6 r! [( a4 C
# remove the file1 z4 a1 a1 q9 E4 x! z# J3 q5 u! k
, B1 j m% C$ s9 s6 K
os.remove("c:\\test\\multiple\\levels\\file.txt")& F, B4 H$ O5 l# p6 L$ T+ `
% a$ `0 B; E `# and all empty directories above it 8 d- h0 ^* C8 M0 X2 N) u4 l1 b& d# n
os.removedirs("c:\\test\\multiple\\levels") ]( ^4 f! f- T, A: V
+ q; S+ w8 x( P( { 7 ?+ b6 N$ i. U; I, F* ^- \
/ H/ N, }. S& R6 x( y) v8 zmkdir 和 rmdir只能处理单级目录操作.0 e( m9 `& e' G( q+ A$ J
/ ?& Y' o( x: B* d" S若要删除非空目录, 可使用 shutil模块中的rmtree函数2 z, q$ V5 V6 G F& d
& b$ k0 O: R, W ; Y- t8 x( g8 }: ^- x6 g 3 M; P" B# _" |1 l# h3. 文件属性的操作 0 w' e! ]% K8 Z ) m' ]' ]2 {; d' T4 M6 S, I% x$ simport os : m* }' c( O: w, K7 _+ h- b E" k, a
import time1 _$ @9 Q! W2 X) R; I
* D3 |3 i- v! _/ Y" Dfile = 'c:\qtest\editor.pyc' 7 i2 b( `# ?9 U8 s) ]/ L + D! r# M/ b1 [9 n 0 H% p6 D+ e" I$ l* g4 y' T L% E7 e
st = os.stat(file) & f) J" T. g, ` 8 R7 R5 Y% S9 f. G; {8 }3 J$ Mprint "state", file6 `% [; k/ R, i( j5 J$ a
. H- o( ]) \! c: h7 G " X! y. _( ?: A* a* K( T3 R, l1 [, @: G+ ^/ `* i. o
def dump(st):5 e' w# r' |" u# o) {' N# E
?, r5 N8 g+ F
mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st# f& N4 D; T! o5 y4 G: z
# P$ Y$ |5 ]- V
print "- size:", size, "bytes"- G3 _; T& h4 }9 n" D
3 D6 e& T0 C* Y" Y1 T * y" M M4 L. l+ Y- `
; Q# j' }: Q$ F3 Q
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): 8 r, P# f ^/ e9 X5 S 5 |8 d4 n; t& p1 Y: F+ x4 {os.fstat(path/file)2 d9 g& ]+ M7 l$ o7 [! U1 p
1 Q4 K) Z0 Y2 r. \; S. K5 M" m% p
Return status for file descriptor fd, like stat().