QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3525|回复: 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
    & [& h1 S5 j- }/ V5 Z* n

    9 `* A8 I5 W1 w9 ~" `2 Dos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    0 f% _3 Z4 |) B9 Z  U
    ) u1 o- ~1 N  P9 I6 K" r0 C   : `6 ^: h! d* B
    : m/ s9 P8 k$ F. \" k
    1.文件操作
    7 p+ @1 z4 H9 g8 [1 A( S8 H* i% T
    build-in函数 open 实现文件创建, 打开, 修改文件的操作
    / P* I0 |" P+ c7 ^' p$ y; _% t* P* t8 R) \6 Z5 t  Q* D

    4 h' j" \0 v' B  K. d
    6 e& v0 i; |+ X  y* m2 qimport os
    - n' u+ r$ S' Y0 T, E! _3 }3 C+ z- F; X/ k* h
    import string
      ?( s% i: c5 T6 F* h- c: l1 h/ c9 [/ Z1 T- S# l
       # E. o6 m  O6 q( e; c5 }. ~
    / ~% A& t) \) X  f5 z( S/ |
    def replace(file, search_for, replace_with):
    * a. f/ c; w" h& k. ~& ^4 b4 |2 Z; \' S
    # replace strings in a text file
    1 V1 p' V+ [& `& n1 ]9 r# F5 I( Q. E0 P5 d/ j8 @2 Z' ]; [
       
    8 q- p. _2 A  T. r9 A8 @0 E: X" D4 i
    back = os.path.splitext(file)[0] + ".bak"
    4 x  P" E9 l/ H/ q: N( X
    + g* Y7 `2 r/ M4 V" r  Htemp = os.path.splitext(file)[0] + ".tmp"
    ( c" D6 i1 p: O9 K8 l$ {: T' X7 p  }
    / M" G2 v& n& i7 P7 n6 I8 j3 D   
    & |4 x: r4 f7 j
    + ?2 Q. p' _$ m; {2 w1 S9 X2 htry:( w% |, _5 Y( L
    2 Y1 u" Z$ x+ `6 C7 j# y
    # remove old temp file, if any
    . E+ S! o! p  o& \3 v2 V/ ]3 K' I/ N; }  q
    os.remove(temp)
    2 r/ L6 c% |3 t1 ]# c8 j: k6 X+ K# V$ G" E
    except os.error:- S( a1 n) n, W

    ) X9 t3 }3 ]- w; l7 A, r- Rpass
    # [% d* U4 [& S/ U, h1 _5 T2 U! V( `4 L! @4 g6 u, ^
       
    7 B0 Y$ M1 ]7 @& D9 V6 P' G3 Q) }/ d- O5 `: Z& G
    fi = open(file) #. m8 B5 v; u0 @. D4 h" g

    , m- j3 S7 h2 ^+ j4 K: A5 wfo = open(temp, "w")        #
    $ d) N! h# M: l- p; t
    ' [8 G/ ^) l& }" Z9 R7 S   / w; P* s2 [0 B- ]

    - ~" A; |1 m( `6 D: O3 N3 {$ z0 t- a, \for s in fi.readlines():# a4 c2 D8 Z2 W& t- S0 O

    . F! w+ l" ?: ~0 O8 `. a3 Sfo.write(string.replace(s, search_for, replace_with))
    - B" q9 y- q8 Z( e5 j7 T5 M
    : }3 o% ^% |7 U6 u7 |5 o& u" r! P0 p   
    5 F* ^; Q3 c8 u" y4 F( X
    + Z; K& U4 y! _, t, f5 Vfi.close()
    ; ~+ S7 B. z6 y0 W
    / _! a$ y6 X% R. A- R5 R+ X( H. Sfo.close()% T% i& [: x8 W% q  b# ^2 n1 q

    3 z# m( k4 Z8 ~3 e   ! F" ~9 c3 y( t- h: j" }

    6 D  t* G' q, {4 l1 Itry:
    - ]  s$ k+ u* e0 S/ A  {; o& c
    : n7 l$ Z0 J  ~( T5 b) ]6 D# remove old backup file, if any  u- C' X3 H7 S/ o4 D2 `
    . I4 c& p" F" O6 w: {' `! H& d
    os.remove(back)
    " t+ I( t" O7 Q+ v7 l1 D' D8 S9 T  c$ R. c
    except os.error:: @3 R$ S# V- T  j7 k" ?

    5 N9 e- L( _% Ipass
    2 m4 Y1 ^( p& k" r3 t: ~# f* ^: ~4 B4 e6 D8 {
       " v, L; L: F6 t! _8 U: w- g

    % h" b3 b- h" N+ B# rename original to backup...2 |7 }- f: K0 x! a) F3 i/ G
    : @! |" J- `/ y
    os.rename(file, back)4 b8 @+ p) D/ w+ D7 h, X

    2 O3 j, l4 L0 c' j   ' _# F: d' X4 Z& O$ t
    7 k/ ?6 x. _5 K2 K; g
    # ...and temporary to original1 P+ }- k" w6 D8 K( O7 W: ?( b( O
    8 T' K9 v$ k3 O" Y; N4 E- B5 `
    os.rename(temp, file)( r  V2 g$ x) T( f7 C% ~
    9 F! K5 ], c; w" o. Y7 m$ x
       
    9 a# c4 l. T! o9 y6 h9 t5 }" ^3 ^) `' V; q+ p% H: V7 P, `4 a
    # try it out!$ O" M* V5 p( l& s9 M, V* A
    / K- e' w6 e  Y# f
       " O0 p4 o0 t2 \& J; p  R
    3 z- n* o% u6 W- }: l
    file = "c:\samples\sample.txt"' [* Q4 v! H* C2 h$ [

    0 c) k8 k. P6 f8 ]3 w; D% y3 J2 K1 T- a   % ^3 G/ Q1 N7 w) l& [
    % H# L* L5 [; m( J: R5 S% o+ ^+ {
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena# {" G# }* W8 \. F; t

    4 O  s' @1 A5 v! A# v9 {2 j+ preplace(file, "tjena", "hello")! `* p' O$ r+ V" ?9 a2 f2 `( w
    # }& _. o5 y3 f2 o& _; S% {
       $ D! w3 Q5 c  g- R7 |
    ' ~) |; J$ x9 z9 N, B  B' z
    2. 目录操作2 ?* a- k* u) R
    ! t) E# n! m( E5 @8 m; r  X
    os 模块包含了许多对目录操作的函数
    4 q# d+ x/ f0 E  g4 @) w& Y1 m* b- v1 W3 Q( S, l! p
    listdir 函数返回给定目录下的所有文件(包括目录)% t2 s- E) l3 R+ i; N
    , w# @8 s1 T7 M( a
       
    3 s% D0 F7 n6 @4 ~
    & I9 r$ f3 {+ X3 Mimport os! _5 z- Y) ?: [$ @  w) r5 o$ T

    9 B( \* E" D; x9 b4 I/ f" M3 ?for file in os.listdir("c:\qtest"):7 ?6 N0 f: b- z; U' T, Y0 B
    ( Z# A, _  D' J9 Z
    print file
    * _3 W, M' `& \0 Z
    ; H5 N; [7 b, r0 g9 X1 ?: `   
    8 T- O  e9 q# M/ m. {  E% u) t5 s( r% X
    " e9 c4 {6 s$ s+ b; Pgetdir 获取当前目录
    7 ^, @$ P! j" \! `" }$ _
    ' w7 @3 s. w) ?9 n1 y& m7 ]1 E. Ychdir 改变当前路径6 r" ?1 _& H7 `! D9 y3 R

    ! y. B- F+ E- p7 d" A$ b3 f   7 e) m! f5 `! t: m& }& o0 j. p
    & O1 W5 A8 `! c( e
    cwd = os.getcwd()1 ^  W, }$ Z1 K9 c2 U& r8 J
    , x! s1 f, k" c( s8 M5 P
    print "1", cwd
    8 V2 N* d$ v4 f9 M0 ]$ L* p9 w8 \6 s2 a; A. {9 D- F
    # go down
    & M3 V& V2 F1 h1 T
    : w7 G4 `: g( }os.chdir("c:\qtest")
    * m1 N& d+ k/ y, y, ?) o5 a3 |8 `' y6 h' @
    print "2", os.getcwd()
    8 U/ V: q# p# Z- x* `+ u4 `& a* q3 B4 Q3 K- c# G! V1 z
    # go back up
    ! K; F* c: U% n+ [! K
      a4 U) g! K  H) N% j" d7 r0 Fos.chdir(os.pardir)#返回当前目录的父目录) W5 n. C4 k7 {9 j
    ! m% L( M* h( Q8 i/ Q* Y0 e
    print "3", os.getcwd()
    / X" N; ^, E( ]9 ]5 G6 \6 K8 I0 O& y$ U* @
       ! h) a& \9 f1 ~* p. F. C

    . R( m+ Y$ U5 l0 B4 }, z. lmakedirs removedirs 生成和删除目录+ [3 `0 C# E" v
    + Y. G9 {) W2 J/ }  S( B1 y, {  W2 W
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除# v/ k) u4 [, U7 x0 [- e8 k

    ! l) {' w+ \5 C4 Q   
    ' n/ t8 u& B3 w+ ]9 Y4 c3 G5 ^( F4 r) X' K5 }( z' z! \0 |! R( |
    import os1 t9 j$ U. t4 C# H! m# A
    ' s. X# D- D9 L$ Z
    os.makedirs("c:\\test\\multiple\\levels")
    & l- L# K, ]  ~# s( l( Q7 \( e
      A, Z* {7 G: n9 Y+ S* qfp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    2 n) f" _# _6 A0 S$ T2 t  _6 e4 X' m( Q9 y5 T* u
    fp.write("inspector praline")5 Z7 X9 @1 i! X

    3 Y* |6 g5 m' E3 Gfp.close()- N  {. T3 Y. `/ [# B. R0 S# Y5 F1 j

    # [1 H" V1 Q7 [2 L2 Y# remove the file
    , h( a& _0 F6 W+ C  E" U7 G
    - \; F& x+ o1 F8 vos.remove("c:\\test\\multiple\\levels\\file.txt")  t6 {) P5 J1 G) l
    1 v$ {7 E* A& |
    # and all empty directories above it
    0 F/ v$ L" s+ i' F# f0 ~$ I( ]
    + T) A& c) E' V0 h. jos.removedirs("c:\\test\\multiple\\levels")
    3 |! h) U% G) ]' \% p) k  Z/ ]1 J
    8 m1 e* w' z6 Q1 O2 R   
    , u4 S( Y0 P  X4 n/ V, z: N" _  M1 ]% V! a2 D  ~
    mkdir 和 rmdir只能处理单级目录操作.2 G( |" R7 A, w6 h7 C

    6 j/ ?$ k( \: j# Q8 y若要删除非空目录, 可使用 shutil模块中的rmtree函数9 j4 L: ?/ d4 h6 @& x. h
    1 g; R$ K9 y6 U
       
    6 w2 }) O# w" Z1 A  Z+ f$ J9 Z4 _1 M- R
    3. 文件属性的操作5 p8 B# U% ~/ a( Z, C( C' X

    - t: V; g4 C  A) e2 w# ?$ pimport os% A& C% V# u. o2 l) U

    . y9 t0 l$ v' R; ]1 @9 x5 c- Y3 ^$ yimport time
    ( U8 g0 S' Q: e" t" r. M; Y
      Z3 D" J9 n; q9 Yfile = 'c:\qtest\editor.pyc'
    + I3 x) o5 |0 r( ?- @7 A) U6 ]+ q
    ; [( o3 h! b  b5 t5 `7 Y, u   
    6 o6 x+ V) f- ?  K9 [: ^4 _: I3 C3 L
    / }* t2 ~8 q! n4 _' L! \4 O& hst = os.stat(file)
    4 B1 o$ Y  ]1 k" P3 {) @4 C. Z, q5 \- X( N9 V  `
    print "state", file
    ! A/ @% v1 E# I  ^: W1 R- `
    & @' n! k7 |% t8 W6 e; L   ' l+ c+ S. [: u1 \1 G2 u
    % @4 x5 f( w6 f$ {* y" J
    def dump(st):0 X# B3 G+ M" I, Z0 R

    & C# u. I- K8 E- h$ Kmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    * [2 v# f7 X6 h3 o, I' I
    / @1 S& _# N% o% A! h! W5 |  d8 Xprint "- size:", size, "bytes"/ z& Z, n5 Q2 f+ S( {, O$ I

    , n  X- t; [" V3 z* [) H6 Oprint "- owner:", uid, gid
    ! }: }( I: f: u- Z4 u1 Y
    ( [9 |( v% G$ Q8 yprint "- created:", time.ctime(ctime)" K  C5 z* _, [7 h. i: l; Q
    + c  O1 [$ S# y- `
    print "- last accessed:", time.ctime(atime)$ ?$ Z8 L9 i9 L% i4 I" N# S8 V
    $ d3 c) p- w& R  j6 ?5 P* Y% H
    print "- last modified:", time.ctime(mtime)
    7 [+ t* P' k# Y6 S9 e! a
    ' u5 l; Q+ Y) D/ sprint "- mode:", oct(mode)
    # W3 N  t  q6 X2 c% Q% Q0 g5 U$ O2 T" w+ J7 g2 R
    print "- inode/dev:", ino, dev
    2 ?: m- l& t4 C% Z1 t0 M. t' M, `2 Z* o" h6 r) W3 n# R" x' P
       
    # k) n+ T; J- h2 q% b6 G5 E0 H3 o
    + k4 |8 i5 r9 f8 I8 dprint dir(st)3 H! T& m5 \! @6 Z* a

      m9 P* ^8 o/ Fprint        
    ; m+ Y) f. {. I! s8 L
    1 N, |8 G; Q/ y: I. `dump(st). |4 j2 w2 X- {* J. Y4 o: D+ |# S5 p
    . I, q7 P# B- E& s% x1 L- K
    # print
    ' N% e6 X& |$ M6 {  z# \) Q
    ; v  X  F/ @1 L4 D+ W   5 W$ j: @2 n# u9 n1 Z$ J
    ( {. w' q0 F. U& u
    fp = open(file)
    8 `3 Y1 [3 ]/ g6 f$ {# b  r, {& Y" l' x3 E3 p6 h- t! c" V
    st = os.fstat(fp.fileno())
      J: ~/ V- X; k# |# W, ]$ H1 x! g* P3 p
    print "fstat", file
    4 s, I3 t6 A, h8 c. j$ [
    ' V- P6 v! a) Jdump(st); e) w& v" C3 v& V5 _. J6 W

    6 Z1 V9 i2 Z7 r6 O   
    & R1 `1 s/ v" f" s: _, N  R% g2 R; {( `" R
    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):
    5 s# t* A8 A3 V5 S# O+ C, ^8 t  u2 v& O: X5 @
    os.fstat(path/file)$ D7 {2 B2 p. o4 o

    8 b7 X" F* M7 V9 n3 B( MReturn 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 A: A. n5 \0 U* k
    可以放进文档当成附件下载的!
    1 H# S3 V0 n( U! d; J; {
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-8-22 07:45 , Processed in 0.436970 second(s), 66 queries .

    回顶部