QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3851|回复: 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 l) ]. j$ t! \( H/ G; E$ C9 _
    4 \5 l7 |7 o- f: c) jos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作# v  y3 b4 Z( P# S9 X, y0 r

    + ]# E- |: N0 |$ b3 w0 o$ F. K# y   
    1 A  X6 p, j4 p' Y
    / T/ o" f" t6 i! M* }! U5 M1.文件操作
    # F6 c  s; A& [! E0 w$ ?' F# }$ ~( {
    * Y$ k1 c+ Q  _* I4 L* c# N( Ibuild-in函数 open 实现文件创建, 打开, 修改文件的操作( {# T/ B1 k1 k. K

    $ n. o. q5 q" V, M   c$ X; T/ C' z

    9 u2 P3 P1 u( b5 @1 h# simport os6 ^$ a2 ]0 `: _+ \7 Z

    : P/ |- _% j2 y# O4 K# P% jimport string
    # c  v0 {0 `/ B# J
    6 ?6 ~' Z, e* z& X6 k/ e3 o   # I3 i+ i: ^+ f1 J

    8 k3 f) l% O$ zdef replace(file, search_for, replace_with):% U$ c- h7 s1 E* L+ t

    " ^0 a' a* Z& J$ W& s/ \# s; h) m  n# replace strings in a text file# w* v9 I2 J: A' ]
    # p% W6 \, v/ e- P9 I- p  H+ O
       
    3 V9 d) Z% c( T
    % [9 v. e7 }2 H  p5 E# M1 yback = os.path.splitext(file)[0] + ".bak"# F  a6 O& x1 x# K& x9 q1 r5 y
    0 h# Z! N; X5 s% J; W+ t
    temp = os.path.splitext(file)[0] + ".tmp"
    5 m& j+ x. `0 [6 t/ c& p9 I' K0 x. u, p$ g% _  x& v5 d
       
    ) I6 X1 M' F0 A/ Z7 C' B3 J; _, ~9 E% L( t) Y( ]
    try:- a- x6 `5 u8 i1 L" P% b1 E' p

    2 _: b: |0 D# V. S$ y/ P# remove old temp file, if any% ^) v' C# a9 B* e# @
    4 ?8 P5 l, W9 D5 g% O* Z' O
    os.remove(temp)8 d8 N6 @  ?2 ^0 S
    ) I" Z. O# \4 a2 S3 f
    except os.error:5 j8 W) Y1 N  `% V; c8 v
      v- v2 `3 `- {" M4 O) U& k# `
    pass1 x) {6 i% B  F

    7 v. U( f- d) u" Q. z   : V( \' N6 |% x$ M/ l- V- ^

      r# U$ _+ ~5 W" s. x( }fi = open(file) #( Z0 j+ c7 q. |1 Q; ^! k
    " o, ?3 Z) P0 ^
    fo = open(temp, "w")        #' d3 y: F" N) t+ G7 |  X( Q
    7 X/ f7 [+ M1 z5 z, {/ b$ f- g+ N
       % S4 f. O: f2 G8 u/ a  X0 \9 W
    ) ~7 K3 w( w- [+ T& c6 Y
    for s in fi.readlines():! i' q) e, F$ x8 W# x( _; B- G* z
    3 i* Z; O- p# G& D  |  |" M
    fo.write(string.replace(s, search_for, replace_with))
    6 {" o5 {. P1 l& Q4 t0 N
    ; r" `+ Z" |. h5 v3 Q" U   ; W1 B. G. y. U& r7 [9 d

    ; O5 O  F' W/ {  qfi.close()! K% s" m# U. @0 @6 ~
    # ~4 W* u$ K) P4 l+ j. L0 }; ^
    fo.close()
    5 f7 y: h2 q, H6 Y5 e! {2 Q# A6 |/ N$ V3 n- v3 H
       
    0 K$ q9 t, g: M9 k4 x/ ]3 @# H( j7 S
    try:9 E. h, |( M8 r- p* r6 R9 J

    ' g) w( v* \$ D/ }+ q# remove old backup file, if any
    7 q  G/ Y+ Y% i. ^
    ' g9 ^% p; T/ l# uos.remove(back)
    ! b$ I. m8 h2 `1 f. Z
    % d/ ]0 Y! o* {except os.error:/ H% ~, o9 R# y  s1 u: U
    / W% B6 y1 L$ u& Y
    pass
    9 V0 E: P9 D, m1 u' X1 B7 _0 e( ^& i; [! \. I) Q
       
    . l3 L3 o% n' j& @0 v
    5 q- b2 a( c5 j4 A# rename original to backup...
    ( f+ J( K' r+ Y  \: t# Z7 J: ~' [7 F  ~0 o: H1 V0 G% \
    os.rename(file, back)$ V# e0 o( T! O5 C5 e7 ]& g# x

    ; ~5 g* n0 q& M   
    3 w' i; H( n: E0 {
    ) C( q6 D2 `) ?2 T( l6 Y# ...and temporary to original
    3 Q+ N* a7 s# i% ]2 w( s
    # Z2 q) C  @' n5 q9 z) {# o( ~os.rename(temp, file)
    / y0 E8 `, P7 K4 t6 J" M
    5 R; f! ~/ Y# q1 m   # g- R  f5 W7 D8 ^; d

    1 {! P0 U3 n: }4 M# try it out!5 u. T& }2 r6 r- a4 u  g3 A

    7 ^3 T' e& {+ k1 |$ ]5 U" o5 ^   
    . X0 Y7 d# f) M, A; N" ^
    9 e4 f. H: x1 t  t" Q8 Ffile = "c:\samples\sample.txt"' Q# p; S% p' u* R; V9 s$ l
    2 o& N$ T# ?* A/ b) ~. Q' @# N
       ' p& ^1 R, U6 P% u8 Q* t. n

    7 g/ s9 r% [' O  areplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    * ~$ P7 Y2 q2 u  n# y$ ^6 f  {6 I3 H! z
    replace(file, "tjena", "hello")
    % j# G  ~3 O, v2 ]4 G% I) n# ]
    : }3 S* v$ x7 Z   
    7 V5 Y% i+ G3 X5 _" {5 ^1 Z2 `8 y
    $ W3 {. n9 i; f& G' R4 c7 m9 _/ G2. 目录操作
    0 x6 W1 Z2 X. L, X# |2 X
      J9 i  H; O) y- i4 p) Wos 模块包含了许多对目录操作的函数3 T+ Z( L& Z& n+ S1 x/ V

    0 |; g4 l/ c. v' ]listdir 函数返回给定目录下的所有文件(包括目录)
    9 m' q- x# T7 X) G# u% f6 G/ B6 ^- H1 Q
       
    8 k8 N& ]! Q* k* K9 T# y; v
    4 L% k# J5 H& Y; Wimport os
    6 C) i0 G. h' F
    1 L4 s8 ]* ]% m; @6 F- Q- }for file in os.listdir("c:\qtest"):# h% t. I; ?1 e* k) O% L. `% r

    , l. y6 Z3 e' z* u2 X7 Dprint file. r6 u" b6 `0 }; ^

    - C1 D' @  J/ K' w3 e   0 Y# V9 @! b* \) E

    . e, l% C* d9 |getdir 获取当前目录$ u3 V6 {2 R! {: [4 M/ ~' o" }

    , d; u# ?. m) y- Z% k$ F  [* pchdir 改变当前路径
    " I1 O" I  K) e% l( S, ]% e! X: O2 H) [
    - a1 ?) i, _. x, L3 m   % @5 b7 B$ e) _5 ]
    ; |2 u9 A! h9 S& b
    cwd = os.getcwd()/ r" M- G$ {$ n& I0 Y, a+ d  D- J% v
    & N1 b$ v5 T1 k
    print "1", cwd
    2 x0 Y8 W; R* w! c3 i5 F0 ~  I  ~% e, |6 C5 w
    # go down9 x2 q- F- x: Z& g
    6 y  T5 ^! d0 W* @4 v0 X; m3 T+ A
    os.chdir("c:\qtest")
    0 t7 ^3 `0 l2 `4 ~& @
    ) }( _0 u# y0 n3 o# Xprint "2", os.getcwd()+ r8 p0 \- O0 o3 U5 e$ n

    6 F- ~( p0 r% P# go back up, Q2 `( ]. ]. x# R8 E( y8 [

    ! o9 v/ X9 k1 r6 Kos.chdir(os.pardir)#返回当前目录的父目录
    ( |, r/ ]1 R3 m% U5 F8 ^. \; S- _- o9 v9 G, P" E0 a
    print "3", os.getcwd()9 ?- y' U# Q7 o
    . v7 r2 @( i0 }2 z
       1 E) o) c+ P( x
    7 y$ X5 D/ x9 K
    makedirs removedirs 生成和删除目录' u& ^# Y* V2 L; ~5 {

    , c& U# T( l) m8 u! L$ W  [$ nmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    $ I9 e* z) F% P! I- x1 m
    * p0 n2 F' I6 k. }+ v3 O   9 X  y2 @; t* r
    6 I9 J) t# ]# W. Q" e
    import os
    3 V) L' A' J! E* c; S; ~2 g5 U' T) G" u
    * g* {# j5 g, q; S5 t+ B# C( B5 xos.makedirs("c:\\test\\multiple\\levels")! ~5 I  ^$ [" L  j7 k
    - Q! D+ A. K6 t. s
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")$ W" b9 k4 R" y8 V
    , w; C* I# _5 V4 z9 C
    fp.write("inspector praline")
    3 a6 B# k9 @. F4 U0 R
    $ X4 O: w( \6 h$ q* Ifp.close()% l' d3 e7 A1 m7 [$ q

    : a/ t* I& h) Z7 l: R8 C# remove the file
    5 V* T$ J4 w) I2 f, |. X# R3 m1 l7 z$ v' Z+ C- U1 i
    os.remove("c:\\test\\multiple\\levels\\file.txt")+ T. I0 @, U* H2 S3 Y6 b
    ) w; Q5 B  g) H" m
    # and all empty directories above it
    0 T) V& I) e4 x4 r! p
    ) s  q) L1 }7 t3 {! M( c% F7 oos.removedirs("c:\\test\\multiple\\levels")9 @. `% e& Y! ?7 D
    / W* ~. E+ Y7 x7 X* r9 ~
       % U9 j5 V, ^  ?

    ( J& @% E& R" M  j# g! C. }mkdir 和 rmdir只能处理单级目录操作.
    / R0 W8 _  B- U3 R7 K+ e+ c6 E+ u( @% q: Q3 x
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    ( _6 C# {  l) H$ ?% @+ G5 t0 C# H8 D( l  X% h/ o, _' w
       
    # }& e7 }2 v5 R  @# a  O' \1 |& E8 {  m( p
    3. 文件属性的操作. ]  ^: r. L) n# E6 |  H' Z- K: L

    9 A8 g# S# R0 Y7 g* A) {import os
    0 O8 p, g5 D3 I# c6 w' W; _9 w' K% f, U
    import time
    2 N& V" _5 s! w, ]6 P0 a8 g4 ~# Z8 H4 b7 F- I1 l
    file = 'c:\qtest\editor.pyc'( g1 M$ A8 T( ~9 h$ E; h6 Q6 h/ Q
    % i4 C) D9 N" V( |
       
    9 P% i/ v& p) V. g
    ' w- v; E/ I- r. W+ g$ h/ n  ]% f  l4 d( I6 vst = os.stat(file)
    & Z8 D8 B9 Z; w5 R. u6 k; K
    * p6 ^& ]8 }4 c  _  ^+ Tprint "state", file0 M3 D& u+ d) G) \7 u8 U' X6 w6 K
    & x+ o5 n0 \- k& z* f
       " ?3 `" u8 o+ z  w
    ) N' g* O2 w3 i3 }, L8 d
    def dump(st):
      S) g. l1 U* B5 a
    . n* m$ ~4 A  t0 y$ W# Z7 Omode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st* P, q- m7 k4 U2 f# L% u* L
    ' j8 c9 B: \& T
    print "- size:", size, "bytes"& a4 `1 P1 ]. E, M% \- K

    " @' X; x: v8 G% U7 {8 V1 q. E* Oprint "- owner:", uid, gid
    - N+ D  f& u" }1 Z
    # F* ^0 ^$ P) q. l6 Aprint "- created:", time.ctime(ctime)
    + o' S1 P. R1 e4 }
    ) b! S& E8 t! m* U7 n5 u( Iprint "- last accessed:", time.ctime(atime)2 A& D+ o* G; b6 o, x
    # V  ?- r/ C. `! S5 V% d8 @
    print "- last modified:", time.ctime(mtime)) a, ~! u6 j6 h3 S& a* k

    4 h+ Y6 S2 E  R; o. h# \print "- mode:", oct(mode)
    * Z% u3 Z, m* b3 q+ }* d% C
    % F9 u0 y2 D' ~8 ^6 a0 {print "- inode/dev:", ino, dev
      L. ~" `! L0 b* v, G, ^! x" K  u6 s" z8 ~# J
       $ [; {& I. P/ t* u
    + D* d* e: Z4 n
    print dir(st)
    8 }) b* K+ K3 k
    # r; V8 @% M# L5 a3 a- u' E' tprint        
    $ v+ G7 ?, C1 d* z+ t: ~/ R# J$ j6 Y& Q
    dump(st)( D: p+ [( K- y7 C0 ~' W. s8 X

    # ~# J7 r/ S2 a/ a1 v+ D# print% I$ H, [. t) e' m- I
    2 E! Q5 {% A1 N1 _2 Q+ `: B
       3 f# H; o: d4 B& }- e4 Q
    . X6 Q& n6 N# [4 x* i
    fp = open(file)
    ' ^$ |4 H" |, `0 T7 X
    8 ?" {9 ]  U. g8 vst = os.fstat(fp.fileno())' N9 F5 A& ]3 H# x- _
    1 u; M; z' g" D, v* H0 H3 T
    print "fstat", file
    9 d9 t# T& `6 D; c5 N: ^5 u, z! h; e7 {, j! n! Z
    dump(st)  P2 b% D4 w$ O, K5 o

    1 U1 x" N! ~2 d" j4 @   3 O! d# }. P* a: l- i
    - Y4 q1 T' t1 S7 D4 c$ C0 v( Y
    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):
    ! l) |" U- W/ }8 w& l7 L) E
      n% t/ R2 R( W% u. e5 o6 M0 wos.fstat(path/file)
    " _& H5 M8 Y, T
    $ n! a. s  c% ^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
    $ ^# P- Y8 h" u  D* ~0 C  I可以放进文档当成附件下载的!
    5 B+ j. s3 a1 I/ J* W
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-11 16:47 , Processed in 0.456944 second(s), 64 queries .

    回顶部