5 B$ K' x u4 w% T% r4 O" C8 u
+ q: @3 ?. ~' R" o0 T
os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作( t0 i+ S9 I: l* s5 H* d3 Z
8 b8 m, L' [) I3 q. ros 模块包含了许多对目录操作的函数 ( Q7 V" F9 M. X$ h" r6 T/ V6 |3 L* P& w* t/ v
listdir 函数返回给定目录下的所有文件(包括目录)- f# O; a* l: Q5 @# X
- p5 d8 k7 h0 ^ / q2 i" R4 `1 ^* O& s: v6 J$ l4 Q4 c
& A1 @* G A% a, E9 b
import os ( \$ ?0 O3 a2 @* [4 d M q3 |- ^ / g, K0 ~- ~+ a0 R6 @5 Ufor file in os.listdir("c:\qtest"):* e l9 y9 F! K/ n3 \
# O/ p; \; c/ s3 Y( e$ }print file 6 J7 h. o7 x$ W0 L 5 E/ W q5 l& U8 O 7 a4 a) @/ d2 p4 |( v5 _; P* F; v * z0 T0 f: X. j2 _getdir 获取当前目录 , k. }$ e$ ~& k$ s & z9 E' D% K# t* U: M7 uchdir 改变当前路径 # X/ X$ P; t: M7 c# x( E, X9 Z/ k$ }/ C- V1 E
& G/ c" m: R( c2 [% V* M) t0 E5 [: T# T5 }$ g$ y% Z
cwd = os.getcwd()9 O4 f# T8 \- v+ u
) J! T. K- D- V/ |6 oprint "1", cwd & V5 W. y) q/ L0 [ 7 I! ]" T3 ]3 q# go down / u+ j @, ^# c, K* Z+ K/ e( K# y5 c
os.chdir("c:\qtest")1 _$ v# `' O$ d
2 L& x1 s B. n" B
print "2", os.getcwd(). w3 z3 H% d, @; ^7 L* ~
0 W0 w4 T8 {: J/ {6 Z/ a1 f
# go back up" X& g" _5 }; W7 b( i! d9 I1 f3 O
8 u+ {. b* b( c9 `7 u; c/ nos.chdir(os.pardir)#返回当前目录的父目录6 _- E4 k* H! r
4 I3 L: O4 l' \4 F7 V6 \
print "3", os.getcwd() % T, U5 Y( X& k) @: L% N& u2 t0 M; ~& S
0 [/ A$ u2 ]- ^, m& A! y9 ^. s& Y5 q6 q. |. E( }7 \$ W7 L
makedirs removedirs 生成和删除目录 * q& Q0 M/ r4 T . v5 ~$ R- }; P2 [# Lmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除 # x3 q) f7 X6 v. y4 W5 B. M# B1 I+ v
$ _: Z. i. `0 A3 E; S- W
2 h+ b2 p' T7 @
import os/ C- y$ M/ ?0 V9 Y' G
. `4 D) S2 w/ O% Z4 Fos.makedirs("c:\\test\\multiple\\levels")/ z5 I0 \: T! [
6 b; s2 c$ _' e' k, k% M6 m% z
fp = open("c:\\test\\multiple\\levels\\file.txt", "w")3 E' {' i( Z7 [: Z7 u- l
) R6 C8 ]! F) x! G% bfp.write("inspector praline")9 X7 E _5 o: X% Y) k
" J" s O2 K' @& R3 c8 c: ^& j! `fp.close() 5 F1 p& R* E' t9 i8 [ ( t! A. K; \) g' Z' \# remove the file / x9 S0 c) \% H: q& ^8 L; d9 G1 b9 | D# g' A
os.remove("c:\\test\\multiple\\levels\\file.txt") ! \3 d } ^" s1 f4 ?' y 0 D( A' [% e5 s' V1 n# and all empty directories above it 4 F0 }- Q! a; }+ ~, C1 w 0 l, w5 ?" y8 _8 A3 n7 Oos.removedirs("c:\\test\\multiple\\levels") % @4 T: X3 v* m$ \! }8 U5 {' n" Q8 s
9 A+ _' N* C" L: L3 x
( P2 {" Q5 f$ y+ p
mkdir 和 rmdir只能处理单级目录操作. 5 u+ h8 ~& L8 v+ y+ I# f 5 Q0 N! \7 d9 M( A若要删除非空目录, 可使用 shutil模块中的rmtree函数0 l! B. i( \3 a% D9 L
7 ?4 |% d1 w `4 U) {! j/ }
; E- p8 V1 T) w5 }8 u5 t2 p0 \* `" x, H
3. 文件属性的操作" O3 d! l$ n$ X |5 b
$ }8 b' R) P d- |% D
import os; k. V/ W1 h, ~
6 t7 v. h6 L2 C+ a
import time 4 q+ e8 X3 s- U* r& W1 X# {& D' L5 O, ?/ |! k# f1 W
file = 'c:\qtest\editor.pyc'. r! f) j& t' \& X, P3 A" y
9 g4 p$ _' h/ i2 f ; H2 Q+ ] a. `& p' O 3 ]4 I& M- F1 K4 y) Z5 F; R2 M) Fst = os.stat(file) 0 |+ J' K1 C+ _0 ~0 x9 Q( M! C. g! R, E! `, z
print "state", file+ e1 k9 ]0 L, m( e, c" p7 [/ U
3 \5 w( r0 _$ o8 p% M( H! i6 i : c7 e0 K& O5 ~! W. c" H0 j R- Z) l$ s2 L
def dump(st):" T. k% }/ y3 p6 r2 e/ F _, ^
1 j0 j' C5 Z5 a1 X4 _5 J
mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st4 m& c: t( u( i ^; N3 w2 _" @
V* ~0 e3 q) Y# X
print "- size:", size, "bytes") i+ h( n. _0 T+ A
. j* r! B3 w2 {, Q' r" u/ M- ~print "- owner:", uid, gid % j) O- Q8 v) d1 o( c' n; o; {8 E* ^6 t9 y* ?
print "- created:", time.ctime(ctime) 7 g7 [( \( z) q. z$ m8 t * D }& S f5 Q( D; ~0 x6 Zprint "- last accessed:", time.ctime(atime)# ~9 p+ P- Y" W$ Q
" N; w- _* }$ k+ ^: X% G
print "- last modified:", time.ctime(mtime)9 o' ?% N: j, A. x- h1 r
6 q9 R- N. ~/ F `! r9 `3 N
print "- mode:", oct(mode) " U9 e& N+ p% Y. Z$ v* d 0 [- z) A0 U2 p0 L ?3 N6 j& Jprint "- inode/dev:", ino, dev % A" J) l0 y! |$ k, X 8 |, ?* b3 e7 ?" B/ y / Q: b3 V6 q) Y) \5 |% R . U4 U, z% w% @' Q) {2 B3 [print dir(st) 4 P8 t: P* O1 V' S3 y) I3 ?4 R0 I. d% Z( F8 C' [, u
print : z. ^, I$ m- M; B: k0 m
u0 e1 h7 S) C) c5 U3 Y
dump(st)( ~# J$ o& P. `3 m& j5 y
# W# r3 p% H# ~: w$ X7 r# print9 ~! \) ]) M# L: z
2 T: f1 y0 q3 z+ j$ v0 K' v
: _7 d- n9 j. _3 Q$ e
( ?4 C+ p) [; R4 `3 j8 a+ Hfp = open(file) ) B O' H/ K4 ]2 p8 U, s) E3 x : P3 _9 I7 @: `$ w; [st = os.fstat(fp.fileno()) {8 m. z& \6 T1 S8 e : Q, Z1 [1 j/ A4 W0 ~" r8 ?print "fstat", file# D! V# e8 `" @! }/ `# A
, h" C. u7 n& \6 X0 y* d5 Udump(st)4 {+ @3 A, v: K; c l) k
- |' Z2 O: C' i5 x
* [0 V3 l; ^8 g; @- E1 z + L# X* L" H. {5 b) b1 v- L* Nremark: 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 M# Y9 j# P4 H9 s# }. @2 c& w1 g2 Q4 k
os.fstat(path/file)" A; K: C; y! R A
1 [* B# |4 O* F7 \
Return status for file descriptor fd, like stat().