QQ登录

只需要一步,快速开始

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

    + u3 E( Q8 }" Z1 `- {: U- K8 o. |
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    $ s; R! V8 Q) E5 m5 R( R- k; P+ e/ E2 X8 q: J4 P8 l) S& P/ }
       
    ) t' ?: M3 C9 }: z8 P* H, ^* k9 m( [2 ^1 p, ~: r7 [. X' P6 F
    1.文件操作6 \: v2 D/ Q. x$ U
    " r9 \$ X: \+ \; o# t
    build-in函数 open 实现文件创建, 打开, 修改文件的操作. k3 X/ e0 M0 W! t
    $ J8 v* ]2 E8 ^( u/ t) a4 E0 V
    6 R; r  Y1 Z( m3 I) l/ [
    / q2 N1 P5 f8 }
    import os
    ) c6 W- r+ M+ ]1 _1 q; v1 D
    + p  ?1 v5 ^' r0 h' Yimport string% t6 A- y* v$ ]8 e" Y/ _
    # r& A9 t: \/ S5 s" s
       8 A2 O; f* `$ U1 g" I

    4 c# J, k4 \5 Pdef replace(file, search_for, replace_with):
    # R7 O- l; @. j2 B5 V5 A) c
    % [1 @1 `4 ?& c3 V. G! P# l8 t' v# replace strings in a text file; F* J" P* H* I" h

    & y6 d& \) N/ w   $ G" f- \5 K: O- T- {8 H% I

    ( q9 o) ^& N# u1 Aback = os.path.splitext(file)[0] + ".bak"
    ( g' W. p( M) l7 O
    0 U' f+ r* i0 h7 otemp = os.path.splitext(file)[0] + ".tmp"
    / J/ i- M  |" `- v* q# y9 [3 n: S$ l- e/ S
       
    7 y* @+ f* H9 P" ^1 M: x/ }7 }; Q# o/ S9 j
    try:! Y0 c/ s! \" b7 r6 {# ]5 ]! X
    ; v, K- l! h# _$ n2 ~
    # remove old temp file, if any
    & x0 A/ G3 M0 e# M; ^
    2 ^0 w: e4 k' v- d" y7 jos.remove(temp)
    % S6 Q4 K, c+ @: c$ r9 U* C; n7 D: o
    except os.error:1 I3 ~$ h" [# ^1 y. T
    6 _- Z6 f5 B) ~  l6 E( s- I
    pass
    5 r/ h2 G. _4 v% m) C  Q* J
    0 v& ]) g. t5 Z% M   
    , G. @5 S4 ]9 u& a9 @( \. u, k
    fi = open(file) #
    9 Z7 P2 U) u3 Q1 a1 k# c! Y' k/ X
    1 r6 t' h3 R4 E- ~- Y6 }9 S) gfo = open(temp, "w")        #
    - v) T7 l' G" F* T( ^
    / ]4 F% k% B* E1 J4 w( G+ m" X   . I; v' B' }. }6 E0 m9 A

    1 K2 g$ ]; i& nfor s in fi.readlines():
    4 B: I, h9 z/ e8 o4 Y2 [$ S5 b  K2 q% ^, X: E* R' G. Q% k: Y: Q
    fo.write(string.replace(s, search_for, replace_with))) t) W* q# |5 b/ Q) ~

    + N9 m. d7 H# x; F$ E   9 m" G& D/ R: e- _; k

    ; Y1 g9 N) d4 E6 S) `3 h, bfi.close()9 W- {. s. t- o# @0 D1 k! S

    ; C( n8 x+ Q- s' lfo.close()
    & t5 ^4 x! V1 L9 i& D. ]  y
    2 z# @; x3 H6 ?1 r   
    $ o( ^" ?3 B. d) z# g4 L4 y
    # G0 {/ ]: a7 k0 \5 b( t( dtry:
    , O& V5 z, E. `9 u0 z3 u: S! n# }: X
      O9 H0 P2 q5 V4 ]! T# remove old backup file, if any( \/ d; `2 {, n  M0 C! V

    % z) R3 y) \5 }8 f5 hos.remove(back)- n4 w7 p) j2 M% J' G: a/ g

    & O8 h8 Z" `+ D4 U) ?6 Q, u# Cexcept os.error:1 K; z, @5 l0 [+ c* x) |. e
    ) Q& P. X; U% a( m6 s! P9 X
    pass
    ( _) y0 ^" f% m8 F7 O0 [& M% D  J
       
    ( o! g& D. l) I5 ]& Z& V% |/ ]1 U8 G8 O2 j
    # rename original to backup.../ X" k* ^6 Z# m* F% `! A

    ) K  n% ~: A$ los.rename(file, back)+ F8 s0 N$ k4 x5 x, l9 i$ K

    ' P# R' @/ Q  e5 V0 s4 Y   
    : c' W8 E$ o8 M1 S$ ~1 Q" A3 p( ^9 V, }, X: T- W! h
    # ...and temporary to original
    * F$ B0 j% K  R% e9 m
    + u5 m% F4 V+ c$ H; Kos.rename(temp, file)
    2 n+ E' }, o- d' C3 _
    * \6 Q! H' @; w. g8 z8 l0 ~   : {/ S8 |1 c: o2 P1 k) g2 c

    . M" q6 R: Q& E2 n# try it out!  B4 q; e8 T8 q% j$ t$ v! ^
    # v& E% D6 ]8 r( k7 ^/ f
       % a; K4 u8 o9 S; d* P2 O3 V$ P) q

    2 ]0 a1 a6 M; n; Gfile = "c:\samples\sample.txt"
    5 c" r9 B6 N  f: H7 I) U+ w* V2 S+ f3 }4 G# ?
       
    ) h3 A6 ?( v1 q5 m$ e& l1 O8 H
    , t$ Z6 g$ S1 o9 Sreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena  `6 Y' c& j) h5 o
    ' x/ B: }& P/ D$ ]
    replace(file, "tjena", "hello")
    ( `$ {/ G- g1 t+ I7 m6 s9 m  k' R( U- R/ q* Q/ A
       
    / m% ^5 ^$ w. `3 q5 `/ K7 V# y% s4 e( F* {8 Q
    2. 目录操作
    5 h5 |; r2 _0 L1 L- W4 k
      h3 ?( E# C$ c% x% @3 Sos 模块包含了许多对目录操作的函数' [6 C* K* T; o3 m) f5 `3 {! M

    $ l4 o$ Z! m# C6 klistdir 函数返回给定目录下的所有文件(包括目录)
    ) m7 Q' d' V2 W( m0 I4 L: T- V9 o3 ^& L# P
       
    & Q( J! T6 B4 i0 Y! a
    - N3 v) F. Z4 V; gimport os4 z/ u: d9 v, i  j. n

    ; t" U( D$ M) O- s( t/ |7 d9 _) r3 zfor file in os.listdir("c:\qtest"):/ n$ M( n0 e# L' V3 }
    , r/ r' f' `  a' t; T/ ^
    print file
    ( w% W/ D( _. t* t4 y1 J( w. t- I  t( Y) X, `* {5 _
       
    & ~  p8 k( A  F: X: }- A
    8 y! W- [4 p8 m1 cgetdir 获取当前目录# B& E1 Z# M8 u0 [: j0 `$ J- e1 J

    , ?7 C% e4 I* k; n9 nchdir 改变当前路径8 w/ e$ p1 s" D; a
    3 F3 i5 U. T$ X  \$ Q! w
       * q9 z; h% f$ a& \3 ^, g* |) B

    / h: o- @( d- ]6 X4 Ocwd = os.getcwd()
    5 D8 a5 ]/ k0 }1 X3 E6 C4 A1 ]7 z! I( m5 |% o; G8 U
    print "1", cwd
    7 f8 j' t9 Y& b# m8 v! o2 z
    $ ^, r/ n- g# c0 T4 K; w# go down4 ?! h0 t6 W( K' X4 S. B
    " F9 s- ?5 G- t4 J
    os.chdir("c:\qtest")' X/ {/ ]& a4 g! ]7 H2 O

    8 n4 c, c+ f$ g' qprint "2", os.getcwd()
    ! N% l  ^- m5 v! S
    * D$ j$ K! k0 k# z# go back up# y+ V9 J% ?7 D" i) c+ p( u- T
    # k+ I9 U& U& M+ W, V0 {* E# C) Y7 V& _
    os.chdir(os.pardir)#返回当前目录的父目录
    ' ?) B. P& n6 J+ P+ x- p/ t, q4 O% G4 H6 d; Q8 [  \
    print "3", os.getcwd()
    $ k# L2 @) }$ i$ @; n: b, a$ [3 {% Z/ j$ k
       , B+ g0 r6 A2 O% R& {% k
    + a3 R4 a" l6 B8 T$ g9 N- C
    makedirs removedirs 生成和删除目录
    ' P! Q4 l8 q' T; ]* i) o
    8 `+ }# d0 c0 J5 c8 Nmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除) g6 z4 S8 X5 |" Q# c, c3 a

    1 R& f6 G) D& q7 p' D4 @   1 h, H7 P, P" ?5 R: |
    # x2 ]6 s+ a: Z& T  F& V7 O
    import os
    1 m! X5 d8 l$ i
    : R9 @: F; X5 z0 L7 U  kos.makedirs("c:\\test\\multiple\\levels")
    5 F% g- X4 R4 B; o7 i/ G! v7 u
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")3 d6 J. \- P  W, U

    & Q8 q' m# t3 x) H& Yfp.write("inspector praline")7 Z7 j, t6 v7 g# x7 k- ~

    ( w( G7 [; W  ~) a3 r8 w; U: Gfp.close()3 W  L% V0 ?+ X; J% g9 R

      J) L; u( y. r# remove the file( J1 m' x% t! D

    + y) O# \+ P3 L( i7 R. l7 M7 l% wos.remove("c:\\test\\multiple\\levels\\file.txt")
    5 ]0 s/ m# A8 N" X! V6 a$ N
    . N0 B$ D; e* j0 _; g4 |0 \# and all empty directories above it
    , _6 E4 r: N% g2 w5 O; p9 Z+ T9 M# P9 {, y6 @$ S
    os.removedirs("c:\\test\\multiple\\levels")$ P( j0 E: v; w  o0 r

    ) j0 @& l( ~) R% V; ~   
      V, K( c4 l1 Y4 @! I) y" }" W) V9 t
      _1 {3 }) B) K' W* ^# Rmkdir 和 rmdir只能处理单级目录操作.6 m2 h+ b3 i4 x+ Q  z- a

    ; g% E0 `" ]6 G: U( h) L) a若要删除非空目录, 可使用 shutil模块中的rmtree函数$ W/ u* y6 M( ^* P" |, ?4 g7 s

    2 `) q$ g3 c% M3 [( }7 U# `   
    ) `4 R5 }3 Z( I  d& k' _( i! t% j4 T+ |9 U( _: R
    3. 文件属性的操作/ _! j# |% K; H7 v. j5 q9 U

      A% M" h) K; r) L# vimport os
    ; c% }4 [1 n9 H: Z. V4 o( i% l& I' m
    import time; T/ [1 Q0 \; e4 a% A" W

    , i: j( h* e6 P5 S, v) \/ V5 P$ ifile = 'c:\qtest\editor.pyc'
    & V2 H- q; J9 W9 s9 o* ]' ~( T& j; ?' v: r$ S( e; U. ?; {  T$ y( _+ \
       5 s1 a, u  a) N5 _9 F! E$ n

    ' w5 a- O/ b1 W  f% f0 B, ust = os.stat(file)
    $ Q1 X" y! l6 ?0 m: O0 u0 V2 V' }2 b1 M0 m
    print "state", file
    % z9 C+ e( n- A9 S' C
    : T3 k6 k  a+ i! k3 O   
    6 j8 |: m5 U6 Z$ v' w
    ) K* G8 o/ \! e+ g& Qdef dump(st):& O) L# }+ A0 _
    & e% T2 x7 j" z- L/ A: \
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st5 V& e4 x8 L( x  F( f
    / ~/ k- a, }+ b% v6 S) p2 I1 m" r
    print "- size:", size, "bytes". v' l- H/ [$ V% D; s( L0 H1 Q

    $ ~0 `% p8 y* f, m1 O+ G- Aprint "- owner:", uid, gid. v; ^, H$ N" L/ u

    - K) ^+ N! L; tprint "- created:", time.ctime(ctime)
    5 R0 w4 u! @. D
    , p6 H; [1 L& T! j/ eprint "- last accessed:", time.ctime(atime)$ H7 @+ h( T0 ~" ]2 R! }
    ! u* k9 _; c: w$ n
    print "- last modified:", time.ctime(mtime)/ R7 W) ?" ]$ o$ C; U/ z: T

    9 G' _+ J: f2 w$ O, `* C; X/ a8 V) zprint "- mode:", oct(mode), U1 ^& N( {& a$ r
    4 ~6 w2 g+ K3 a+ x  U
    print "- inode/dev:", ino, dev
    0 j9 l5 `7 d$ `) r4 A* {/ f# s
    ; N; Q+ j" ]' W0 P( v( g$ ]   
    4 ~% U, P6 b7 ]  s' C$ P! e% R9 j% P. o. |& [! `
    print dir(st)/ F8 L% {4 X: Z" f
    $ Z0 L8 s3 H) b# v
    print        . `4 T' |  |! q# y) i

    , Y8 |3 k$ x, R7 H) Z( r/ p/ Zdump(st)5 f+ w) [6 c6 Q/ [; V! S
    " i2 v$ y0 |! Z6 U" g& H
    # print
    5 |. X0 @1 N8 c. S9 A
    * |, a! J0 X$ C+ j   / M: o/ B: G9 R, K5 Y2 I& y$ A
    $ z6 E- i/ W' S
    fp = open(file)
    $ ^& R# F9 v5 @' S, ]$ D& z/ V# S7 Q4 ^8 C% w: J% E$ F3 @
    st = os.fstat(fp.fileno())
    $ Y3 z- V4 a2 s( T* a: @8 A% i
    , g5 A1 B+ q! u3 L" dprint "fstat", file$ p+ r+ X' |0 M' d5 ?6 `. [
      x  G: P, x/ t) J, ~: Q) ^. K
    dump(st)
    * E) t5 ^  ]' r# N3 Q, D- b. ^7 N; ?+ ^% h# y" v0 l
       
    9 u8 X& \3 |5 W. [2 Y/ M. I2 H+ W# [1 I9 p/ ]! W
    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):: M7 \7 m4 W, G1 Q. t8 i: M$ W

    7 I  V: {" J- Y" a$ _os.fstat(path/file)! y2 J2 D" p0 `- ^) s1 s

    4 A* H. Y, z+ i, R6 K+ F, aReturn 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 `  {0 f# u5 h* A  i' J, [
    可以放进文档当成附件下载的!

    - Q. n9 i0 p1 y& e  P很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-12 10:26 , Processed in 0.342719 second(s), 67 queries .

    回顶部