QQ登录

只需要一步,快速开始

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

    7 n. n4 g% i; z6 f' T
    % c7 R% Z) B- w9 L: X3 ~1 u# wos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作7 G: `, K$ S# @9 |! J7 \

    + ^0 F/ r) U# N7 ]6 B5 D   
    6 m) }) V: w; ?2 c4 q) n1 l- m( x9 c- _9 O" O& [4 R
    1.文件操作9 _, B; H6 s4 k4 z( y+ k

    3 _! W! h4 H: Z2 a+ zbuild-in函数 open 实现文件创建, 打开, 修改文件的操作
    9 g$ P* a0 P+ O: W8 Z2 M; O1 @/ ?
    5 w2 T. M+ L' ~+ G+ p1 n! g
    ) W! E# L( ~* K6 M, Q4 R2 c
    : i% Q- T' v; T/ cimport os
    9 p4 `' _% i; g2 W1 ?$ T- i* {; G. g) a; d1 }; P5 L
    import string; v( ~" B% ~7 _2 e7 w* D' `

    3 A( Z4 u9 z4 t9 Y0 _% Z7 O8 ^; ]- n( y   
    ( R: \  L  X8 Q+ B8 e* i0 _8 o- M9 @7 A9 n, j. A! j  Y
    def replace(file, search_for, replace_with):
    " C4 W" r6 z# l  G+ z7 J/ e- l! m2 b  g: q) X5 h
    # replace strings in a text file- |* K/ k) n5 o2 a6 V8 x, @: ?

    9 g: T/ b  S! G, p) j! C5 Z   $ R% K; r( v- _- R

    ; u7 z7 Y0 j) g! m/ }% T7 q! cback = os.path.splitext(file)[0] + ".bak") [. p8 R* U0 g8 D" ~

    4 `  m6 \+ S2 {8 qtemp = os.path.splitext(file)[0] + ".tmp"4 a- n$ @- _( O% L( R9 Z
    2 m2 x2 ]7 Y8 ?. ]' o
       2 e& B. G; @4 I, p/ \
    % q+ o) L' Z  a" ^% h9 z; i
    try:
    4 F4 F2 ?) Y( V* Q# O& k) S  C
    7 @2 b& A! E' ?8 @# remove old temp file, if any
      v. T5 V* |5 G( _9 C* c$ y( b% c, ]- d2 V
    os.remove(temp)
    - H) z5 Z% C: [  d
    1 G0 ~4 Z, w5 U3 R; aexcept os.error:
    ! U% m. i9 W8 ]- c6 N% Z7 `* ~% W0 N1 ^- ~
    pass
    . _! j- a/ v6 M
    ! ~6 O) ?: }7 l" a, I   
    ; w( b* P: S: @3 g$ p( S: q; N5 K7 o: M. n
    fi = open(file) #0 O! n! O: A% @7 L/ z. Q. }

    3 U! R* A& i* \+ N* d/ Wfo = open(temp, "w")        #
    4 x# J8 z# b8 v4 l7 Q
    : N$ ^' p7 g& Q" j; Y: y# U0 T* ?& m   5 Z4 S! r+ ~7 m

    % A5 f/ U7 D7 p: z3 x2 C  J* N9 Dfor s in fi.readlines():
    9 E( s. J1 g# B8 _5 M8 b7 ?
    + ^4 p3 _. O! n0 j' \( G3 k" {fo.write(string.replace(s, search_for, replace_with))
    , `) {, T* J! f5 I, G: S4 h4 k  c! Y1 A
       
    & t7 }! V+ Z9 ?" Y
    8 O; }" ^. U1 T8 F; ?fi.close()4 |% O, W& P  Q
    ! `) q* F8 p! ^2 [2 }, }/ q0 P
    fo.close()( ]( [% Z/ [( E) ]

    & w% U- x& V5 Z   9 S5 O! ?. Z- G: V

    7 ~8 Q) d; B) n. ~' \& Rtry:1 p& h# N9 b8 A: A1 Z/ u4 E. A
    & P0 {5 r+ Y. A! B4 ]2 G% ^( ]; `
    # remove old backup file, if any
    ' M! o( M6 E1 j. `# E) n, z& ^  V" W0 g* c3 a. o3 w
    os.remove(back)# j0 A+ v( L& o. M6 F8 x' ]

    ( P* y# Q  b  Qexcept os.error:" t: s9 Z! C; k8 ^
    2 ?3 r8 k9 f& T7 a$ L. E3 u
    pass- z/ w7 G9 q+ L6 a' x, l
    ! w, M$ y4 t" |9 m; a: G
       
    8 C, o  a; _5 y* M
    2 \, N* _# f6 {0 q4 j# rename original to backup...
    + D. r/ T: a8 q5 ^# ]/ m
    ; \* c$ u1 u" k- L# v2 o2 Qos.rename(file, back)
    % G/ c$ q0 p3 Q" I+ n9 J& a) |7 z% R! C
       8 E0 w% N$ R( O7 U5 }2 G- E

    3 N! @- ]4 ~6 b/ u$ {# ...and temporary to original. w! w, z7 G1 v: V9 N- b2 E: r, ]
    3 e: `% h/ [' z6 X; n  G
    os.rename(temp, file)/ F+ i8 v- l% [

    4 j" P# q3 ^! h( m   
    8 h+ h' @2 q8 S; k+ w& n
    + ]9 x, [5 I( I' ~/ \9 m8 V" m% E: R0 M# try it out!+ R$ F5 M( q2 z' a* i- C
    3 I! Q1 j% b/ @1 i- ?: H& s
       
    5 A# H" Z+ [4 I2 O
    3 y! @: R+ l3 d3 y- U  ~7 Nfile = "c:\samples\sample.txt"2 C0 x9 @7 f3 i( _3 S$ @
    , P& r1 ~# L5 C9 q( o) r
       
    ! M7 c2 l9 d% t$ w& S) E* e' `9 g4 ]
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    6 L/ |* `! G$ x! L0 [, D
    ! H) _: a9 r; r( T0 @replace(file, "tjena", "hello")
    , ~' `$ J: E. e# k) P5 r# `2 r" E
    4 a$ x* t  \( s  s# X5 T# o   
    + e7 v5 [; G7 C' G; A/ l. ]
    5 L8 J  l% u- W; j3 S2. 目录操作
    - q; i( }$ a9 u
      G5 \* y. c# q: V' dos 模块包含了许多对目录操作的函数
    6 z  C4 E7 k& o4 M- I5 x$ B
    / I% W! {! ?5 l/ |" h) K3 Y7 plistdir 函数返回给定目录下的所有文件(包括目录)$ z3 E; O8 j) |& T8 |

    . D7 E. i/ s2 m/ K$ `   5 S0 {+ n" B' g. Q0 B$ P/ x5 U
    6 _, b7 x! {% s$ Q) [* C
    import os2 X' f* X. w# ]  r8 `
    1 V. m1 @  d' \( |
    for file in os.listdir("c:\qtest"):1 d) j" N$ O$ u; w# t' Y

    9 H6 Q; s! A5 U1 s8 ?- ?print file
    : p6 r3 p, }+ |6 V$ H2 `7 _
    # o8 h7 q! \' p7 S: ?   
    ' e+ U* R! O% L) T8 G. x8 C. r' z' p
    , L( K6 P# k4 g& tgetdir 获取当前目录
    - U) o: [6 T! Q6 S; c! ^2 f- O/ Z9 I  T  C3 X. K3 r- o7 c' p! @  ~/ J
    chdir 改变当前路径; ^9 _6 a- y7 N

    6 C  H) P# x0 L   - N, O" d1 D+ G! z, I

    ; M' F( V) y# V/ ]( L1 z6 S9 Ucwd = os.getcwd()$ m6 y2 Y/ L; I2 J( a7 ]; e
    ; }# m2 A& O- ]2 a  c, q
    print "1", cwd
    : P7 Y/ [& |9 x- ~% G! h" i" Z- q7 h8 V; h$ Q9 w
    # go down  O2 f4 Z8 o, c0 L) y

    ( J1 @9 Q4 z9 C0 a0 o2 |  zos.chdir("c:\qtest")9 X$ K/ }9 m4 H

      R2 s, {! i5 Y: w4 }& u% fprint "2", os.getcwd()
    : a' G; ^: E- F+ V6 T' C
    . s, n, B4 e+ |& s) ~# go back up+ f) T0 m5 R6 U# V/ a0 ?9 b

    $ e8 G9 w8 }9 i6 R7 e* eos.chdir(os.pardir)#返回当前目录的父目录
    ( v$ \6 B* r$ E4 P) A) [( @3 ^, k: o- Z
    print "3", os.getcwd()
    , t7 B, }4 q. ]7 w4 h# G' u4 A8 W  W) p0 J) z* t3 G
       
    ( p* l( C5 k  ]: s7 i7 D' L; r: u8 i" a
    ( @9 x! N; X; W# \% S% Umakedirs removedirs 生成和删除目录
    , b* |+ M% S+ _- w/ ^
    " Q* P) b/ Y+ A6 [$ e* a, I% Dmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    & m' d9 o3 c2 C) g
    2 T2 X' o9 K; t+ P   4 S& s* n* ^/ Q5 d  M

    5 X* Y/ `# W3 p- Rimport os
    / a8 e2 C- F* l2 G% C9 x. P8 x0 \
    0 j+ ~) U. l( jos.makedirs("c:\\test\\multiple\\levels")
    % \7 c: {/ v+ T: Y/ @$ I" [+ s3 I, c5 h+ k2 T
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")+ i' p) t' f6 a: d0 o

    / J7 G2 ?' v" E, x3 {. j4 \fp.write("inspector praline")
    1 {  ]6 z6 y! y
    - c7 x3 `3 o# Q& d+ Tfp.close()
    4 u! @: c& S5 ~+ F$ G6 J& m- k# c9 \- ^0 b* w# O4 x
    # remove the file! S8 g  l  Y, ~- T/ j
    & O( x: o" @9 N2 I# @6 z
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    2 @' Z9 s  @, N; q, q
    ) |6 V- a9 O1 d. F  n# and all empty directories above it
    " R" k) c0 T: x) Y+ v/ H$ b+ i4 s* S* e
    os.removedirs("c:\\test\\multiple\\levels")
    5 }5 v0 P# `9 `" Q6 m( b7 m. r2 u# [3 z( N' Y$ B9 k0 O' |
       1 Y% j# Q' T! ^$ D- l

    7 P1 s# y$ _' O* C! `6 omkdir 和 rmdir只能处理单级目录操作.6 ~$ q& J  |4 ^8 m
    * t0 w: K' p) h" ]/ Z+ Y3 Z
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    2 o; E5 @" g/ T) v$ n* E4 E" Y1 n1 g$ W2 h: Y% W* j: J' z: n
       2 {6 i  p4 v+ B* w- @' E4 {( ?/ j

    # T: }. C, ?4 B% U* \3. 文件属性的操作8 a7 B+ E( {, ~. f# {% }

    , D" i  P6 M+ I1 Eimport os
    / |( F. b7 T  ?4 ?  e- [
    % Y$ ~! t: N+ Q: d7 k9 f6 P3 ?import time" b1 n% w4 s: H4 ?4 P. N" _2 Z
    . H' g# B( k1 t! L
    file = 'c:\qtest\editor.pyc'% F1 S& O, |# W' B( Y/ O, }. p

    ' A, h" o+ `* c' o3 X   9 p" g" V; @$ g' \! a9 i
    $ D6 \4 z' v# E
    st = os.stat(file)5 g3 D5 C5 j- G( w9 D
    $ L! |! k2 |( ?: M$ c9 ?5 D
    print "state", file: K3 b4 @7 @. A% b2 s+ H
    ! f0 N2 U0 H$ w
       
    8 C5 S7 M- r2 I$ P: `' G! k+ ^# L
    0 i( G: a, H, d' ~; Gdef dump(st):/ W8 h$ c2 c* T0 y6 j' c) t8 a& u  z

    , r2 q% P* S) k) E& {9 k4 c& c2 \mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st6 @; m7 d5 V2 k% N
      S! b* r& \! N1 u- M4 _2 C' Z
    print "- size:", size, "bytes"9 Y  X# b/ T9 G- s$ k2 g

    4 L" B. u" n4 ?print "- owner:", uid, gid
    . O1 N4 z' i6 Y0 `- O. C/ L
    $ r0 n9 G& D" s  O3 ~/ O+ pprint "- created:", time.ctime(ctime)
    5 E+ r  v' G; d4 d, a$ w' h, x( a6 z, o8 v; g3 D' d% `
    print "- last accessed:", time.ctime(atime)2 }/ j" p& D- K3 ]/ P
    " d; ^. N/ _" K% d/ E% z- m% T- k
    print "- last modified:", time.ctime(mtime)6 E/ w5 X6 O8 j3 g" \( Y8 U5 D) p* q

      ?1 L- ]3 N$ j6 e/ X2 Fprint "- mode:", oct(mode)3 _8 {( A+ C& m) ]1 z6 z/ t0 n/ x+ g
    0 S7 C; r8 z* h% O! ?" b8 e3 m  D
    print "- inode/dev:", ino, dev; Q7 p  I8 O, Q3 I! {0 }

    # l1 q# z# T; M1 o" `$ R9 g! W   8 p! S! R( ?: Y+ Y4 Z/ g/ G& @7 h
    - ]1 _- C8 T# ^& v; S& c. K: T: M( T7 Z
    print dir(st)
    9 d% v2 p( u" U& V/ f5 C3 S: v+ }6 W, @. C* J# }
    print        / x5 }% _, ^! s# x1 m. \& t
    - c' a2 s! ?7 p7 W: y" a
    dump(st)
    ( u& g+ t: K- {2 T, {: x4 o" \/ j/ Z% Y. q2 K3 d, k2 l+ H
    # print
    4 Z$ `8 T! [' O
    1 O( V8 j2 g- }$ y0 u$ ~# q# G. ?, h   
    + ^. a) D; i) N; r* s- _2 r* U! S: F; ^" [  d8 a5 c
    fp = open(file)% q8 S+ M, \  m3 E% T' \! v6 B; J

    3 w. h" d1 B  [4 b  y2 cst = os.fstat(fp.fileno())6 ~6 e7 x6 X* N7 k5 c% I' M, a+ _
    4 D8 O( ~( K2 d  A3 J) h
    print "fstat", file% O& @; ?9 v" s. ~& \/ T) I) |

    : ?! s3 U& r/ z* S% w0 [dump(st)
    $ B2 N0 W' @3 i# i) q% v7 h, f+ S0 m# c7 M" L0 j
       $ I* m4 S) e9 m& [% Y" C6 }! \

    ; q* o3 @8 U0 i4 p) O3 zremark: 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):
    - f6 W( g4 j% V4 b6 W! o0 \0 W9 S3 K+ Y
    os.fstat(path/file): Y3 k( @! k" J" s  I3 e
    ! C" k  r0 W  B; y, W+ t: D
    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
    * @7 c5 f9 f  Y% c可以放进文档当成附件下载的!
    9 m) _2 ], |* q9 I6 B! U
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-10-13 09:03 , Processed in 0.392607 second(s), 64 queries .

    回顶部