QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3788|回复: 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
    ) R% X' j$ ^+ b) K. `

    3 n. I/ Y  b. t0 \os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作/ P. s& y; T& k
    # j# }( n/ s: a( ?3 U
       
    + b; e7 v4 N7 ?; J4 \$ d# Q
    % u0 J& g! b4 _" W6 @1.文件操作
    3 C; H2 ^. M& `( A& m
    ) Y( ~" w; i& N" V$ ]- fbuild-in函数 open 实现文件创建, 打开, 修改文件的操作' D+ x0 V5 x' I/ r

    + P: J# @; c0 p: [8 P' d # p* V, F% P, k6 y

    0 @' k$ O3 E" G- D, n" S8 Q- Yimport os# y7 q# E+ F+ d3 N; o7 J( ?
    3 U) @9 @3 x' u' i4 V% `8 H( ~
    import string
    $ @5 e$ _# y# F9 o7 i7 g; N# b. j* J. N- T' C2 K6 @% s: @9 s
       & u) m7 V; A2 w# t' h" D  s& G7 l

    ! d- A- o  ]& t+ p/ L9 E8 x8 Edef replace(file, search_for, replace_with):
    ; e* w" m9 f8 A6 Q+ T; B; i1 h. B
    # replace strings in a text file: g, F* b  z8 W
    - C# n# l6 |# Z/ e1 U1 i& `- i
       
    ( U7 J. j5 d. D$ R& b5 ~& {% s9 t% e* C
    back = os.path.splitext(file)[0] + ".bak": u, k6 O* h" p: k: B" p
    0 t, U# \* T7 _1 E2 d. M
    temp = os.path.splitext(file)[0] + ".tmp"
    ; O7 w( t2 {# L3 |" A& W. B; n" R+ A; F8 G' J
       
    " w, r4 x4 w& \; |- |, u* w! \6 _
    1 M* {" ]- P: Y0 m  qtry:( D/ T  Z+ F6 L2 J- r- x
    6 E6 D; n1 S$ X  H( l2 L
    # remove old temp file, if any& f8 z1 u4 z0 k: Z! f1 X! ^
    4 \% e- X8 C7 `  n9 i  z$ t
    os.remove(temp)
    . a9 v' B$ x  K, d% U
    ; S6 _/ R' }" Yexcept os.error:/ `. T1 {5 S! v: J% |$ X
    # I8 Y5 L+ Q% _& Y3 D
    pass
    9 C  r3 C1 ]7 p' S0 w- v# }$ w0 r, L* z; c
       
    # P' {# w/ V" N9 X
      l6 u( L- }& y6 ]* x  W# L. x5 Afi = open(file) #0 `/ {8 }3 g* ?. P8 O1 ~- o

    * C: W9 H2 D  l$ A- dfo = open(temp, "w")        #
      J  ?( i0 C) I0 U8 h, @3 i
    " ^& C( K- |1 W( w   
    9 ]. S4 W! Z. [& k
    . g" M* o) {& r5 W9 l& hfor s in fi.readlines():* C2 o" J/ e' b, L3 Y' O6 ?3 C

    1 i% g) e. [0 `0 d( C/ {fo.write(string.replace(s, search_for, replace_with))
    4 k" ?8 R5 {& L5 F3 P: q2 [* z$ i+ M! n( x
       
    , V# N3 ]+ s2 E" u
    3 A- H' n" W, F+ N" L' c! N" ^fi.close()
    , ]( c4 J/ f7 o' H& n( Z+ }8 W, P' I5 k! Z
    fo.close()- J3 S8 c1 m3 }* Z5 e
    3 t5 L; x) p) u* q
       ; F; [2 [/ L* K

    # x/ A3 G$ x" f, v, Ctry:
    % g1 l' f/ c/ x/ `  q( x# [. E& k4 g& p. {. y& ?/ w
    # remove old backup file, if any+ g3 W2 g& R8 Y
    - L$ n- F# U& @6 s7 u7 ^6 W  K
    os.remove(back)# x% {2 d. `( M% y. [& b

    " t$ Z$ b2 |$ a* A3 o' ]& kexcept os.error:
    - V/ _' K- B6 ~0 T9 ~
    / n7 f; v9 [. n. @8 z5 Epass
    3 U/ ^6 r: |, Q* {, S! G) m
      u5 n5 M  }  J: n/ \2 O( e   ) h: Y5 _. R  F* P& U9 k+ w* h+ j* ~

    ) I. G. b9 Y' \! V# rename original to backup...8 d2 i- {% @& S

    / N+ ?& k9 o8 s8 ?+ D7 Uos.rename(file, back)7 p+ ^/ @- F# u4 D. S

    % d# R- m0 [% D6 B+ l   4 x+ g8 P( P* [
    ; H) P4 Q0 t# w" h3 Y  ^# r% ]
    # ...and temporary to original
    - t& m" R" s4 k/ w/ e
    0 B4 y) N9 ?  {+ n6 c! {9 hos.rename(temp, file)
    9 M: j% g. T+ _4 z
    / O. H$ b9 v6 q8 C   $ h' ?3 P6 C; e

    ! d  d- h* J: U3 e# i! L# J# try it out!
    $ Z' p* G  n, r8 N  G0 r
    2 C& m% u( X1 Q( _0 M8 @   7 z' C: P' O4 q4 L) ?
    7 q2 M- A) l! \9 d2 T# `
    file = "c:\samples\sample.txt"* e% }  h; g) \" I. o8 ?6 o
    ) N$ B+ ]; E* x5 C# w9 \3 P3 ^& g
       
    % }1 ?/ I; P, }7 l8 s& W
    0 Z' y: V3 `/ f2 p1 |3 ]) C9 oreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    ; T: C( A& n/ z: y+ ^# l: E0 F+ }5 O. K1 @* ^; h3 s. c
    replace(file, "tjena", "hello")
      K+ l/ _# [9 `4 o, f5 m0 y7 l  z; R0 u
       3 z7 V* \7 L8 Q

    : F# e+ q2 G8 ^2. 目录操作5 ^: H) Q7 o( r& D
    + N5 ^( h; O8 T3 M. c$ ]
    os 模块包含了许多对目录操作的函数. B. |* r8 O0 L: g

    6 S, T' e8 T4 j0 d$ Qlistdir 函数返回给定目录下的所有文件(包括目录)5 H  n$ J1 _: J" S. z0 n( g, q
    * y0 _# G6 z' L" Y! m& t" \
       1 r; c6 p( p0 k& t* I

    & A4 o. k  Q- ^5 M) K& T* ^  U, Yimport os7 N* C: `7 [6 h5 p  ?& t6 d& {

    + i, `* q# I+ O( R4 v1 ofor file in os.listdir("c:\qtest"):* \3 [( _# g- H6 F! G* q, Y5 Y
    " T0 z3 m6 R0 \& b( N: c1 ~
    print file
      n9 j/ m. u" o4 t9 I4 P" S- Y
    6 f3 @. }, [6 \$ G$ ^   
    1 W! Z( Q4 G/ P; T0 d
    3 U0 c5 |  T+ E5 Igetdir 获取当前目录7 v0 u7 ~$ A; J9 G

    , R( W3 j' J& Y9 tchdir 改变当前路径
    - N$ h/ D4 H5 S, u0 t$ Y  N5 W' ^4 s) m. w1 s. q/ D7 c5 I
       
    3 W( R. h( R% A: {
    + G: ?+ E# e6 Dcwd = os.getcwd()
    * L/ T/ [" H$ y- ^/ D5 h8 f" S7 @4 B: Z
    print "1", cwd
    % `; H# V5 m6 ~' D4 }; m1 S9 M. h
    ; n1 U% M: P' D* S6 z# go down& v# ]- T4 l7 j0 V3 i

    - f# y' \; W! `, g( |os.chdir("c:\qtest")* B2 B: ]3 n6 \8 O+ h; X" r

    # f5 K; i' W8 I3 E1 }print "2", os.getcwd()8 {$ K/ H7 ]* t8 m

    - |: Z% @  P' X3 S: Z# go back up
      {2 T9 s. \9 s. Z$ Q# [
    ) U. j8 `& ^% r! a; Ros.chdir(os.pardir)#返回当前目录的父目录! G0 s( d; Y! i- }7 S+ ^' e' x5 a
    $ p. ^9 s9 C% d. J
    print "3", os.getcwd()7 q6 g, M& G6 O0 F  f

    5 R+ b" D' |0 E( _   ( t' O* N8 |' ?3 E$ k1 f7 Q
    , }3 E0 L9 `) t6 R# H% H
    makedirs removedirs 生成和删除目录
    . V4 d, K9 Z+ B1 n  W( X2 C+ j, K1 X. X* V" {" }; f
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除  h% `/ P3 i, D: ?/ _! I: b

    2 h1 O" ~1 X$ f   
    2 ?# }  z* k' r! ?/ o' v, y) ]0 a! d
    import os
    & j2 w' z5 [1 Q# b) s& W
    2 T) v4 g, q" w# L2 d- ros.makedirs("c:\\test\\multiple\\levels")
    1 I# ~; g: o# X8 T- r
    9 _* q+ r9 n: z: Dfp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    5 ?6 p& I/ s4 i/ K6 U' [' A1 O. _1 d4 r) L) v; g  T5 s& j, Z1 j
    fp.write("inspector praline")
    3 R5 F, U+ ]4 x3 b' d: [5 b' A' `; c
    fp.close()
    ' l3 G8 N8 L; Y) U. W2 x" L
    . P7 Y% T2 Q$ V4 m+ ]$ V6 d1 @) `/ n# remove the file! n: j8 v, G( {! p+ Y1 C- n' D

    7 }+ a# C; s! }+ q8 _+ q3 a" vos.remove("c:\\test\\multiple\\levels\\file.txt")8 n, W8 y( M: R
    ' @2 h# ~8 R$ ?0 x
    # and all empty directories above it9 a8 G* y  Y* d- E. b4 t( k3 v3 Z5 ?
    2 j' \" y5 k2 s6 K4 g5 Y6 H
    os.removedirs("c:\\test\\multiple\\levels")
    ; p) T) h' o9 J9 d4 |
    ; I/ L% T4 `+ S( v% O0 T   
    & I7 x# P9 \. T+ J9 p* Y, {% y7 i% Y( u+ F- c! G% Y' s
    mkdir 和 rmdir只能处理单级目录操作.
    9 z6 \% C' P$ E* \
    " ~2 `/ U9 S' S' D若要删除非空目录, 可使用 shutil模块中的rmtree函数& }7 n2 P' T4 z* O
    7 u& J; {! D5 T- H
       9 b1 u' {5 C# C# W, Z# y

    / Q- R; A1 x, M. `- ~3. 文件属性的操作
    $ ~, r: B' V* [! C: D
    % i$ U0 c4 _5 L8 y1 r/ Bimport os* f6 x" y* h( B9 B. D

    + ^- v; g; I3 `0 {import time" ^+ U6 v+ `1 m- @/ ?  z9 Y
      ]( O6 U- h0 Y: U' }. x7 J
    file = 'c:\qtest\editor.pyc'
    / l6 n* P+ I7 z2 ]& V+ |
    : W$ ^2 x' k) }   
    * X2 t6 l7 L& X0 @9 Q1 \2 L( h; o6 @
    st = os.stat(file); ~8 |5 s) J& _* {+ I1 n

    8 J. d6 Y% N2 h, d3 l9 kprint "state", file
    ) f% z9 g: @, `* J4 @- {( n2 @) n! u3 `; V4 j9 W* u+ p
       
    ! i, x' I* Q6 N! N- V' ?' J! G. l, F: q; h- B
    def dump(st):, ^2 w8 v. O2 ^- c: D' R! h

    1 e" |9 W5 |& v% Ymode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st% N3 Y8 Z1 U! {& h# U3 @3 _& O3 Z2 Y
    ' E- K# L: o* R  ?/ b
    print "- size:", size, "bytes"/ Z2 a8 ^, s& W6 m/ E# x
    - z5 c  e( R" n0 J1 ~2 K
    print "- owner:", uid, gid
    ) Z7 P4 Y1 ~# V8 q
    6 [$ w+ n4 x- t7 O- `6 {, bprint "- created:", time.ctime(ctime)
    * ~& [. h# C, `  h, b( v, G8 @9 q/ _. G: q, [; X
    print "- last accessed:", time.ctime(atime)
    , B/ f( R: U5 C3 ]5 {) C. t% O; q" r
    print "- last modified:", time.ctime(mtime)
    : w' m  f9 I7 z8 I) z/ R1 F8 {
    4 d0 _& E! {+ L$ m) ^print "- mode:", oct(mode). |4 l7 F1 ]6 f2 o2 _( e
    ) h+ s3 B/ S; z' u
    print "- inode/dev:", ino, dev
    6 w! R/ g8 Y: O2 h% v/ m; J9 O! Z' c& A4 m
       
    5 `- z7 i$ x  M+ O$ ~( a" {& O# F" ]2 a2 D
    print dir(st)8 e& s% H4 o; ]8 q. E) v+ j9 N
    8 L8 H# H6 V' E, i% c* ^1 c4 B
    print        
    8 D- S( P# P8 |( [( p- K0 R& G) {  E" i" V4 P5 n
    dump(st)+ C* q" A( B* K4 H. C/ Y+ G& c- o

    7 v' H* M# d0 O8 s# print% n9 B: C, _  x8 s  h

    3 @8 @1 F' J9 J0 X   2 C- D& x3 d$ H# {: O" w, _

    1 S" n# Q3 b% `( N& e0 Yfp = open(file)
    + _# k) i! I4 \1 \6 J- Z9 R' a$ |! ^6 R. i: l. ?3 m% q
    st = os.fstat(fp.fileno())
    . K9 W2 }8 C5 B! x5 @& r4 X2 Z& E4 S9 q3 ]! Y+ A: _" J
    print "fstat", file
    * k: k+ M3 b6 P" E  n# Q# P" [/ _  z( ^* G+ w
    dump(st)
    ' {8 U- C4 M9 X. n5 Y
    - f3 E% a/ [7 \- P; l: f   8 A0 X) I) P: I) h) T
    " m" A, c  n5 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):
    , h/ i5 U( v4 b8 X3 N# D4 X9 n5 Z
    os.fstat(path/file)2 [0 r# {1 {& Y& j4 X% ~* i5 @
    7 `. @7 N, W- M
    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 9 |; Y5 o" u3 Q' M
    可以放进文档当成附件下载的!
    * ?$ f' U% N& h/ R' {( c1 U. o  X
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-9 23:19 , Processed in 2.637696 second(s), 66 queries .

    回顶部