QQ登录

只需要一步,快速开始

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

    ; l* T3 ]  i) @& F4 S9 [# r
    3 [7 u1 f+ p" ~' Gos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作6 H# L  {# U" D3 t" S8 w
    5 X2 P, ^7 w0 g  c/ P9 T6 T7 r' s1 p
       
      _, P0 p& g! X8 W
    9 x/ @+ p% s4 A1.文件操作
    ( ?% v' \2 [9 k+ L$ m* q- N2 U) r! ^+ b2 W3 ~/ [
    build-in函数 open 实现文件创建, 打开, 修改文件的操作& Q) G  s! u# \) ?; v+ @
    4 ^) {" _6 a! ~, d7 B

    6 e; J' w' O" c( L3 M# P7 ^1 }1 s" l, `$ u- f3 G; G. n' a3 A
    import os
    ! \& A3 Q. I2 H7 B7 y: T& V
    ' q2 c" o& l- I( e+ @; r; Rimport string. V8 [& s( u2 ?0 A3 n" W8 Y
    ! F' J8 D5 Y2 W/ _, J3 @
       
    5 K: Q! }) E5 t1 G& w. f: H& N7 {# T) [" n! F6 Y1 g" v
    def replace(file, search_for, replace_with):/ G6 N7 }/ e- @# S4 _) k  v

    7 S5 \/ O# f! B% Q3 T' Q3 `6 i. I0 Q) D# replace strings in a text file/ d/ d% g/ }# U+ j

    : b" o8 K& ]! o8 e( H   - e4 |$ h- ]$ e) \+ s: V& N/ H
    - K  W  H, _- ?8 }
    back = os.path.splitext(file)[0] + ".bak"6 X: |) N" \3 r+ j% j4 o
    . f3 D" u# k+ |7 k9 n' F. }: W+ n
    temp = os.path.splitext(file)[0] + ".tmp"$ Y/ ]* F# O, e" s
    / v) y9 U6 X- c& {% _4 f- E
       ; q# X/ d9 I& c" O1 a& H4 ^5 z
    , y: b. Q: a3 e' @6 I/ I1 h' R
    try:; }4 f, w3 X, C) ]. S

    " @3 {6 x; @! \9 d( e" z# remove old temp file, if any4 r$ M* C2 x; T% A$ f

    . y$ L6 h" ], ]/ Y# |& Mos.remove(temp)
    " E. ?  |/ m# i& H9 s. ?$ g' A0 @3 g, O% R4 b
    except os.error:
    / |7 c3 z1 H+ p$ k  _# w% q4 [3 U" ~5 \+ s) q
    pass/ v: e; ?; I# a" [$ y* P
    1 C% z: x8 R- \, \) H/ v% E5 d5 H
       
    5 Y$ d/ ]: p8 ^# [+ k/ _
    / _4 K8 W- W/ F  z  \0 k' ?* S5 S  dfi = open(file) #5 }9 a: B! W- W! \4 y

      Z- v2 y: \1 a( |! gfo = open(temp, "w")        #
    + ~  j' u+ m6 Y* {) R
    9 \' J0 u6 a9 T   3 y4 v7 }6 T9 {  X/ z- [
    / s$ L$ u' a/ p1 M6 b0 {
    for s in fi.readlines():* n3 l, s% f" O
    5 |& F3 P( h  n& w) v( Q. \
    fo.write(string.replace(s, search_for, replace_with)). p, K7 i- I/ Y0 o# q1 u  e: v
    ' g' v8 V' x( Y1 \* R* a: Y
       & N9 Q+ ^) N  J' F
    & a6 U5 i( _# E3 N" B/ T/ F5 M  Q
    fi.close()( A1 Z& n6 `# O0 j

    ; z7 F; H* @- h1 J7 K! [fo.close()
    * f- Y  N! N' B7 W& c% D/ a
    ; V4 f* G1 R5 i  v2 S% M   $ s1 F5 i/ u% s2 d( W8 f4 Z
    3 X: x* h& v0 F6 K; l! f
    try:
    , D5 O& [! r% D8 r
    & G1 G5 W: o! y; v8 \# remove old backup file, if any
    5 {7 Q' P/ P  T! j3 t8 U
    + v' p( ~: y+ c' J0 b5 U% K$ ?os.remove(back)
    $ Z+ H9 K7 F# ^0 C; x7 `. ~
    $ V4 q' A4 ?/ ?2 }0 f$ o; ^  uexcept os.error:
    3 O9 }6 d7 E6 N. A( B; S
    7 C0 y- A8 @! y! ~: G: T# Upass
    . ?4 q! T# R6 c9 G  f0 ?
    . f6 I0 l( G' ^8 s   ' t' l/ \6 y9 ?( ?2 M9 a' U

    % U# @- v. d& ^, z% ~# rename original to backup...
    9 y( N- v0 v* ^' S
    $ z. s. }+ ~& l9 B1 p  S: S. ros.rename(file, back)- m5 O- T: A, j8 [, J
    1 c- Y" i9 w2 s$ z/ X/ J
       9 D; o' b" W8 D) ~
    " C! g+ m7 |* e' C% P; s3 v( b  n
    # ...and temporary to original
    : D+ B" w* e* s! n5 b$ Y4 ]+ _2 J3 d
    os.rename(temp, file)
    0 P9 H( c) c3 J* M7 p, T( S8 T( N
    - a3 h$ e. D! G   9 W. k1 w" j  T# o

    0 C5 i7 y/ ]7 t6 l% F7 Y+ {# try it out!  u  Z8 B6 w( B8 k  `

    2 \; P! e; v: z' j% m   
    & ^7 S7 X! p3 B3 n. Y5 D' }
    1 @& M6 z% G: {# B3 F2 \  Vfile = "c:\samples\sample.txt"
    # O$ ]3 @2 F2 x9 F5 D0 h+ R- c, J1 o3 `) t: a
       
    . W6 b# u/ ^# {% N, i( M1 j/ m/ D# L  A# Y8 n# W& e, [. S
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena* y/ c1 ?2 j  l% L
    8 ]9 d* n# j; d7 c5 h* q
    replace(file, "tjena", "hello")- X5 f* d+ {$ y( D" I& ~% p) J7 H
    ! r* w" S0 d: c$ i4 E5 U
       
    . |# i" \4 g" {; ]' T5 \: p( _7 S
    2. 目录操作
    5 c% O  Y' X5 T8 q# f4 R! ~0 D
    ' c$ T' B5 }- @4 Z/ G& ~, bos 模块包含了许多对目录操作的函数
    * U& t! c0 q3 @9 n# A. W# O; |$ J2 d) U$ U: w
    listdir 函数返回给定目录下的所有文件(包括目录); t# F, x' y; u, ~9 B% C

    ; L8 w# ^( i8 h8 _# r   ; L  m9 Y. B6 y5 a: a2 w! a% o
    3 H* s! I' B+ p5 a1 }; h: H3 D) w
    import os
    6 ?, p5 g+ I$ ]# V( u; c
    ( S2 r) g7 Z$ {) u' Tfor file in os.listdir("c:\qtest"):
    ; a7 n, M1 t/ E0 Q9 J) }" d2 _0 V1 V% v; {$ h6 M/ S; ?; K. A& a& ~
    print file6 ?* U% Z1 m7 ?! T; A
    # D) S& U9 j# q+ _( ~: v5 [
       ; R& ^; A( E3 N) J& t. w3 t& J" I
    ; ?0 q7 a# P9 K
    getdir 获取当前目录
    % a9 ^% [7 t! f" ?, r) q9 R  s2 t+ r5 }4 t# R
    chdir 改变当前路径
    + Y2 ^+ _& }* I
    # i9 N7 ]0 n- M# Y   8 y" }1 Z5 B; G) X/ B; x" ?  O

    0 j& S# b: Z( e- F& g% ocwd = os.getcwd()  L) x3 f' }8 u1 K( Q* A% m) f& P

    5 C( a, K* K  Z6 ^# h; _/ mprint "1", cwd7 r# r$ m6 x" ?$ L5 _
    9 s8 P7 w: R& x) `1 M6 W# l6 M8 b
    # go down
    : w( t: m7 s  a9 Y, E# `" y/ I: |" x" ]* ~, o: x5 u: ~
    os.chdir("c:\qtest")9 E4 G9 k4 s! c! V7 N, J9 F
    2 s3 E' W! C& L4 f* T3 ]5 p
    print "2", os.getcwd()
    / }8 K: P9 N5 L2 d5 O0 }) _  Q& i; t- G4 }/ y( C5 Y
    # go back up
    . L6 I5 p5 C2 d7 S4 I
    $ U, ]4 V- E$ w% i9 |: B9 l- Jos.chdir(os.pardir)#返回当前目录的父目录
    3 L4 \1 e8 y! m+ P
    * O% i) o4 T! h( C/ Z' {9 dprint "3", os.getcwd()
    ' c7 W7 ^0 s8 W
    $ p* R1 C! ?! `  C   ! x# ~- W9 ?, B+ X/ s$ w7 o
    " C: l) x( u( n) w
    makedirs removedirs 生成和删除目录5 T8 m$ V3 w1 Z6 {8 a! `$ Z

    0 ?, k5 g, ]8 h5 S; h4 Smakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除0 _" U$ D! J  S8 \

    1 c  @5 D2 `# O, G$ E2 x   
    ) F+ `# t: f) U. e
    8 \+ g  a, d, E; f% O+ p; ximport os5 h$ |; x7 w8 _* j1 a. S% m, v

    6 L+ Y: D3 N* S( R! xos.makedirs("c:\\test\\multiple\\levels")# u* M% u- V# O0 d* h

    1 x1 Y0 g2 w' ~fp = open("c:\\test\\multiple\\levels\\file.txt", "w"). y, D2 A. ?3 P2 F- I+ ?) {* T* i" k

    ) W8 g  _3 @! a4 v$ efp.write("inspector praline")( ]  B; h5 W1 m: s, I# m# J

    & B: O& ]: h; {- Kfp.close()" A3 C: V# z' x+ a! O) B4 I

    9 X! U. Z) n( H4 `. x# remove the file& J: g% U$ q# T( f) Z; S& H1 U% U
    2 k% u5 I3 N' w) z- V6 g5 n
    os.remove("c:\\test\\multiple\\levels\\file.txt")8 Q9 K3 t. d/ I! E

    # G& p* C0 q! ]$ i7 g9 M# and all empty directories above it
    : m1 O" X' P  b; V. x( y: x6 P3 a+ k$ A: ^+ T% R; l8 s
    os.removedirs("c:\\test\\multiple\\levels")
    ) l! j8 Y9 J+ `/ V
    " w# T" d" h  x. }   
    ' y1 u, c' p* e  {: \; T
    1 r  s5 i$ O+ Omkdir 和 rmdir只能处理单级目录操作.
    & H; O9 U2 B- [: g. b3 O8 g) b8 `- g8 s7 E: k1 j. \
    若要删除非空目录, 可使用 shutil模块中的rmtree函数, d$ ~& k6 t; y8 U% `
    & d5 U+ H' t+ R  K% T
       7 m1 s! u8 E+ e2 O$ c

    3 O/ k% b5 S, }  u- e3 n$ K% Q3. 文件属性的操作
    * q" U. V) Z+ {0 k* J( r7 b' N3 N
    import os8 X7 a; R5 `9 p# h  E2 T2 M

    " Z2 Y0 s5 Y1 X1 O( M7 ximport time6 b; P# x- f9 d

    ! l# ~/ h* j) k8 c- {# wfile = 'c:\qtest\editor.pyc'
    . \7 w/ P3 Y, [5 a! I( k( h& b- J" [) \" V
       
    1 w: g' H. }/ _% p4 {: b7 n
    1 a1 i' H& E4 s# C4 }% H* Nst = os.stat(file)% Q5 ?2 S  y% ?' j! ^
    + f* z! j1 a& d
    print "state", file. N. E1 K( K& G4 I
    + D$ k* q/ i  l9 Z- f' D) G
       
    2 a8 {( a5 R4 W: P
    / F2 l+ J0 Z; Jdef dump(st):+ T* l* n" x$ Y/ u

    & b8 O. Z9 B/ Y9 P2 bmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st) W( Y& q. h0 y" r

    1 f( D. E( }" ^& E) ^* Sprint "- size:", size, "bytes"
    9 \& D! X+ y' g# [
    & I. Y* c* h, N. Fprint "- owner:", uid, gid( ]4 a' i) U: [  H
    2 M. s' H6 `4 c' y9 A8 }; q
    print "- created:", time.ctime(ctime)& O0 F: d% q3 U7 M* |
    3 V* V+ q7 D# \, _
    print "- last accessed:", time.ctime(atime)
    2 D/ }9 u* l$ W5 j- `" G. T  X7 J6 \9 |0 P4 ?
    print "- last modified:", time.ctime(mtime)
    / Z+ `& N* L9 C  u
    ; ^' X: ]3 Z) J: b) I+ aprint "- mode:", oct(mode)- `# P6 X2 K( M& W$ D$ H) P( C
    # c! U; d: C" j" A
    print "- inode/dev:", ino, dev
    ! B% x. n, N8 ^( e! l" z: J7 ?! g- @; n( u) Y  b4 p
       
    . Z/ x3 d, k2 H1 J# `% n6 q4 d: x  M4 i
    print dir(st)/ i/ U/ M  n$ }# K5 z) Q

    ' M3 w  _. Z. X5 h, {. |6 @. Dprint        
    : V  `! j1 h$ w9 v- ?0 B. x( w% X* ^4 q9 U* `( J2 i7 V' V3 i% h
    dump(st)
    ) P6 H, h* ]+ T4 B4 H# {$ T, z. l, M
    # print1 e7 e7 ~) L8 V2 m

    $ d2 |) g: h  b5 x1 `) g: {% T   7 ?( S9 }& ?$ S

    / ?' K6 g$ z8 o; j0 R* Kfp = open(file)
    4 Z6 @$ d, D  _
    , z, H9 \& y6 {2 q$ R  B& j1 Ist = os.fstat(fp.fileno())
    1 j# g- C  N% \9 p0 {7 Z2 N& S: U5 F/ D% f: K# ]1 c! q
    print "fstat", file+ e8 N$ q4 b8 ]( q3 v
    , @6 O0 ]4 ?: B! j* j/ `* s% }
    dump(st)
    6 t- L& z. c- b8 t# R8 h. w- B6 O7 @; c+ W
       $ T1 b1 @& U8 r; ?* {
    * V& w$ X1 K! q' n4 R' d1 ]
    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):
    3 g  a3 N+ y- \8 }, K2 v" Q6 i* F3 M8 X7 P0 h9 V: w
    os.fstat(path/file)# E. c+ v  j' A" h* T$ L# E: U  Q' u
    8 k9 _  H/ A+ Z  x6 f
    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
    " a3 K  v) |* h0 q9 b5 `4 Z可以放进文档当成附件下载的!

    5 Z9 }& f* I4 h; ?- {很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-8 05:43 , Processed in 0.412997 second(s), 63 queries .

    回顶部