QQ登录

只需要一步,快速开始

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

    0 t9 h& |# g$ b" i9 b! }: m- _
    8 J+ w# C/ s/ ?, uos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作, l* |4 P% y( K/ F% x! y

    # _; X- P5 _  l% C  c   , I. x8 v2 Z( i* }, x) v% N

    6 @4 i' P$ v! I1.文件操作2 `$ b0 [5 \: z( {, @. P: j

    ' I/ o: j+ |  P7 l. k# ~build-in函数 open 实现文件创建, 打开, 修改文件的操作3 h. X8 O- ^. }3 V9 u6 Z+ V
    ' D# e8 [5 d; d- G
    & C; {1 B& ^5 h) N! ^5 O+ Z8 v# f
    0 }* [* W4 O+ T/ d
    import os2 c* u5 L, r8 t
    ( x3 X5 N" H2 Y& O" ]( w# v6 w
    import string2 d' }& ^$ {, c. D( W$ M

    ; j0 Q4 P4 ~: _6 ?% ]   
    - ]* z3 T6 R/ M4 s0 u5 A* x: j. k) j$ l4 r9 x
    def replace(file, search_for, replace_with):, M: K" h- o6 T  a
    , N8 u" s0 `( ~% x
    # replace strings in a text file
    ( p' E. A( \8 p% X$ l4 B9 p0 _. E; b
       % y- |1 z0 o+ r5 A$ D# ~

    2 Y: |# j9 j5 A0 q+ U7 x2 ^" I: U4 pback = os.path.splitext(file)[0] + ".bak"
    ! n7 `/ u, \3 Q" k3 T/ K9 R# ~& n+ C# E7 r3 N! d, s% f# N+ \
    temp = os.path.splitext(file)[0] + ".tmp"
    7 n2 t. i; i' r2 H& c) w6 ]- m/ Y5 k  E' C! [
       
    5 I4 @" M/ L- T+ c' h  |$ y
    4 A* {0 n- K3 K  M" |% Etry:/ v0 K- E; f5 @0 b) t

    5 ]( S1 O7 i9 j3 s3 j# remove old temp file, if any
    : z$ R; w0 N0 q" ~! x  _# X. d
    os.remove(temp)+ q. M9 Q* R: X" z: K

    ( _) o7 s2 P/ xexcept os.error:
      _3 B9 ^( f1 l7 ?7 s$ m) c4 r+ D3 f9 _: o& H+ ~
    pass$ m8 v3 o$ b' ?3 n# q
    ; w5 c: w, g5 m' U! W# `
       # I. g9 U9 U9 E' }) K7 ]6 N% \

    5 \: `- }3 I& U9 y9 Y+ g% rfi = open(file) #0 w* V! o6 G& S3 e; ?6 k7 E, T* {

    ! _9 Q& n# n; }/ efo = open(temp, "w")        #
    ) n7 P& u4 y1 a! W4 i3 x1 X- a8 u8 p1 Y( L" F2 d- b; i1 d: O
       . p3 H1 d# f: Y' T. y; `
      x9 N; i8 \  s
    for s in fi.readlines():' Q8 b% ~+ V! ^! F( q+ Y

    # C! ~, T, N4 z% n3 y% ?  Wfo.write(string.replace(s, search_for, replace_with))
    . R" B3 Q% i/ t0 E1 d! Q) J! Q
    ; I0 j$ k% w" j/ @) ?   ! i) \2 h8 N2 N0 a9 @3 z
      a* W2 o+ F3 ]  @, C
    fi.close()
    8 ~: N$ F* a, R; C/ t
    # ^7 ~2 P: y  ^8 [, T; Q& Ufo.close()
    4 b$ X2 h9 c' b1 P# m5 @9 ^2 X9 {* d6 I# g  F
       # I5 d- S+ \' H5 A0 y+ t2 n  o" J: I
    6 ]3 R5 Y) `' j$ `  S4 R( \  s
    try:& \, \4 s# v8 R0 U
    : p! v9 t" f1 L; p3 R
    # remove old backup file, if any; B0 o9 z. S5 ]/ J1 S) |0 T
    $ f$ g) w% h/ p  C# m
    os.remove(back)1 T7 W* r! o! W

    % y$ M! o/ Y0 |' ], z) s- `) _except os.error:
    $ m0 f3 \! P" m- }" H) u8 V) E8 h6 r: R! U: M
    pass9 q% I0 H, r: W( x. ]4 z* {7 Z
    1 I; X4 p- F, d
       
    3 C, o2 b  v2 Z* q' {, t) q7 K5 g$ j' ?" t
    # rename original to backup...8 @4 o( A# u! a9 f6 @2 ?3 F( A

    ! t5 ~" i4 c' ~. q! [1 g7 z" vos.rename(file, back)
    ! Z: l) ?! S9 T7 {; y! T1 b4 O  m' r# w% [( R  p3 _5 H
       
    $ p- I. u3 E/ o  t/ t6 y& A' P" e+ Q0 n8 ?7 T9 v) P
    # ...and temporary to original/ n1 M9 m4 d! d' g1 j" m
      n4 q( F3 Q" w% ~
    os.rename(temp, file)
    0 g3 U; Z' M6 o# g& Z) a7 {5 h
    3 J! }3 ~$ Y, g   ; S* R3 M, I1 K  J9 b4 |8 g2 J
    * @0 {, k; K3 }2 a4 L# H' p2 @# d
    # try it out!6 i6 N: v. L7 {. c4 G
    $ ]" y1 Z0 `/ B, o* d* _( R
       
    / W- r5 d" B. V: R
    ) e2 f% V, N) I! k+ Y6 jfile = "c:\samples\sample.txt"- z$ E' y1 f9 h: g+ t- S

    1 V# Q/ Z4 L" B/ {  ?3 l" y   
    2 N( ]. S: K1 o8 s' m! @4 \. n- {' M5 h2 [
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena9 ?% s: k1 f) ~1 R6 e6 m

    + w) c$ z$ c0 u3 s, \5 ereplace(file, "tjena", "hello")% }1 ~4 ?3 q9 g5 ^5 u0 s& F

    ! D4 Y+ j' o+ C  D; ^- H; Z   & ^9 T8 f7 r2 ]! x! \8 W* ?
    . a: h/ `) f; T* N, j3 T! l7 r
    2. 目录操作
    9 I/ Q7 u" A+ V' r
    ( O/ f6 D, ?$ M1 }" kos 模块包含了许多对目录操作的函数
    # N6 @& A/ }0 U$ |3 z- {
    6 {. L2 J1 B- `; C, O# s; a+ z! L& ?listdir 函数返回给定目录下的所有文件(包括目录)
    + J5 E( t5 x& M+ T0 S4 b+ T9 |* |: R) K& J, d4 Q# K3 `
       ( i4 P- K0 l0 p! s, @3 b

    + W. M1 B+ Q7 L- W7 Himport os
    6 d$ V9 n& {4 Z$ d
    8 k/ k' l: I6 I3 P0 N8 U* xfor file in os.listdir("c:\qtest"):; O3 m! I6 p; ^! C$ T+ X7 t
    ) u6 Z' Q! l5 N  ]9 B5 i
    print file
    0 n- x- z  @) e4 [) B' x3 {: r! B7 x: h+ f6 I$ L8 X
       " W+ o. Z- h, ]7 ?; i
    3 n2 f8 C) d( L2 U
    getdir 获取当前目录2 }6 T2 o, v* l- t4 h7 o

    2 |5 U0 V' A7 Tchdir 改变当前路径$ {5 {0 [) c4 m8 w
    - p8 x- m  Q! E& w
       " A7 g  G8 D* G) ^/ {) a/ b
    . X( z) R. I( E" S2 D
    cwd = os.getcwd()
    1 f3 `9 ^$ F6 f
    " z4 d- z! k0 i  n0 k: W4 iprint "1", cwd  `0 Q; t1 J3 p" D- l! C

    1 O# g, A" o  g- F# go down* B* A, z. u  F0 i. g+ p+ G
    % \: x5 y! M9 a- n; y: y4 Y4 c3 r
    os.chdir("c:\qtest")
    / l" A* E; J$ L- t6 B% Y8 e
    % n! ~+ e1 S! S5 x1 O) C0 }* Zprint "2", os.getcwd()
    0 h( t1 I9 }( {$ T8 L4 J" B7 V5 f$ z% Q& j# c2 `. g# r
    # go back up: X- h8 Y) l9 L( s. ~5 l" }( d1 j, |
    " }5 k# Q) m( a; Q3 w4 @7 R1 ^
    os.chdir(os.pardir)#返回当前目录的父目录
    ) X! r. Y' P3 [1 N. P# F( y) X8 `# I% c  e2 E
    print "3", os.getcwd()
    ; O/ M4 e8 ]9 |4 d5 \+ `8 t0 x+ ?# f7 A, E
       
    9 O5 c7 f6 U# D' b( B# M5 B+ V1 ?/ c' H; M8 v2 p$ B- ?
    makedirs removedirs 生成和删除目录) T* R- @6 i3 V$ x0 M

    9 t' B; v& D$ |makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除- w3 o( Y. M3 Z# _

      E' M( o, @  o1 p8 ]   
    + T5 x# @# j  Y5 H5 F
    . W/ }# J. P! S' vimport os
    / O6 ]# f+ Q1 P' t$ f5 ]% Q
    # E# Y2 V; q, r0 tos.makedirs("c:\\test\\multiple\\levels")% [3 u3 |4 W. \3 X; z
    ! C3 x# o  x7 J! |: v
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    7 A* k* e& K* ~: I) T( K: x
    " s2 }% j5 l' E; M' Q9 j4 {6 wfp.write("inspector praline")
    & j" [9 _  `* X/ a; S) e
    8 @3 n, L3 j8 a4 ~% w3 Y) U2 Yfp.close()
    ( d5 c7 J2 J/ M- K) u8 X$ s- U$ p" A: g! d1 p* d7 m! i: l$ [
    # remove the file9 w- E, H& R: z: s9 Z" n: ^
    - x# r9 G) Q/ Q7 a+ ], x
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    3 T- Z5 G9 f! P& X0 \
    7 T. M  f# p; |  E# \# and all empty directories above it
    & k8 N5 O, D# Q, h. D) h; D# k
    7 K2 R, x) L) y8 d- ?os.removedirs("c:\\test\\multiple\\levels")
    5 b5 o& n3 N; r% |$ R; ?
    2 x- D4 f4 ^# ]& t1 e; T   & w# {0 x2 T" Q3 q( f- ~& c4 ?

      z& e/ q4 n& f2 |+ j! d7 m  L, lmkdir 和 rmdir只能处理单级目录操作.
    4 y' C( ?  g. S3 F! N! g* z" i5 h% U4 ^0 O
    若要删除非空目录, 可使用 shutil模块中的rmtree函数% x( V2 ^" Q* R2 E, ~* Z

    $ N$ i- {! G, ^" n   
    9 z9 b7 s, G# l* \# V8 _3 @4 C; c; r
    3. 文件属性的操作- L8 n1 J5 o" L4 i1 G; c$ c4 q

    " u" x9 r- J$ n6 |import os" v3 L/ u' g: @( S' o6 V

      ?4 M- m: ^6 Qimport time4 j) r' p; Q/ \* M# S5 E

    4 B# \" w: y% H7 M  H; L2 D* J0 ]file = 'c:\qtest\editor.pyc'# i' _% M4 t0 ^2 t! B# {$ |

    5 b: ?7 @$ p0 U# K: {; m  L3 G8 G   % W: J4 \. c+ G: ~: I$ ]8 b
    $ o! V8 H: B8 e; s) y+ B
    st = os.stat(file)
    7 k# A( {$ \" N7 b4 S& U7 j  w3 d7 v. C* T; z0 P, ~
    print "state", file7 g- b3 \  e% Y9 J) ]1 f2 u

    1 T5 Y% O1 ^8 F, T' H   $ ?; {, c3 l( e& x) o0 u( P
    # T3 z6 ~6 z- N3 X- U
    def dump(st):
    + D/ P/ n2 B3 {, T7 [$ n
    1 T, t' v5 N3 U1 U7 W# b+ j5 L! omode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st# l% v; \. P: o* @( G$ p4 G3 u

    / W& z7 }5 X4 r* Sprint "- size:", size, "bytes"# K: k2 `3 u5 q4 j: o  u0 s  f
    9 e$ |4 ~/ B$ k  @1 z/ {) ^
    print "- owner:", uid, gid
    ) u' b* j" J1 C  @/ T8 Z8 D$ ?& `. @+ Z
    print "- created:", time.ctime(ctime)# h/ P, M8 u& G9 V8 [" @

    ' N1 i& B" W# Q- U* \4 pprint "- last accessed:", time.ctime(atime)
    ( j  k' l! d6 h$ v; D; N
    6 j' X' u. \) m9 _print "- last modified:", time.ctime(mtime)9 X) y! e" T( u
    9 T/ Z# S, |6 j9 ]8 Z* g
    print "- mode:", oct(mode)
    " r6 R4 k9 v6 t/ I. g9 X0 U
    * V0 F2 s8 T4 {print "- inode/dev:", ino, dev5 P+ q5 H5 s7 A' b3 d/ O

    " R+ U% e2 U2 a! ?, ^# |4 j4 L   
    3 k% @3 n6 H& v' i, b
    ! q1 M  D1 l+ l' Bprint dir(st)
    & ~9 F/ C" `. g& Z, P& ?: m9 x) [0 u' g: O; S# p
    print        ! f3 T1 n4 h9 X4 E! J

    + x$ r# j1 S( s$ X- H; Ndump(st)- _6 \/ P5 N1 J! a
    6 g9 b2 T/ V) ?2 _. B& J
    # print, w  ]1 S0 c/ H+ z

    + ]) R9 N) e/ y, [   3 x, u4 t! i8 i9 l  f$ c" q, _
    # p, Q: [4 f1 c, }! ?4 b! h8 J
    fp = open(file)
    ; E5 ?4 ~) H; ?: J3 D
    + Q" U. r/ |# Gst = os.fstat(fp.fileno())+ }2 b: t+ l+ O5 Q& X1 {
    . E0 ^9 a3 d( I
    print "fstat", file
    % L. y9 [4 h# t' O. }. s8 Y, h: w3 M1 X5 e: c* d! z1 l+ g
    dump(st)& E  w( r# V5 G, T
    # |  d/ E' F) n, N# k  f- H
       
    & \( ?1 R; H5 h3 G3 t* ^# Y2 j4 b0 M: K7 [" b% f+ `$ S- U( {
    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):
    ! N9 f8 n0 D1 r. ?& g$ ]  W' m# m: h9 P4 t" H: n4 ~
    os.fstat(path/file)$ O8 e/ G. m: G: V. t* z  L$ {

    0 O: b+ M" h( E8 b  s8 A- [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 1 J2 R4 r; c7 f7 m
    可以放进文档当成附件下载的!
    . O# C: s- ^2 W2 H1 f& [9 {& @* m
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-10 08:41 , Processed in 0.521968 second(s), 63 queries .

    回顶部