QQ登录

只需要一步,快速开始

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

      v9 Y6 J0 S! f5 g2 N$ P2 z* @  H
    2 R8 y9 J! v* w8 aos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作4 m: A/ H9 S9 \; l
    ( E) `6 U1 V8 y; g9 ^# }
       
    " c0 C& g4 F: a. [$ b5 a) u- ~) b. g, E! h, t" O- v/ U8 C( D2 Y5 k
    1.文件操作, g% Q* V+ z, f' z, e% L

    * L4 z9 S* Q1 P$ m! _' Qbuild-in函数 open 实现文件创建, 打开, 修改文件的操作# h- H  ^5 Z2 Q$ p: B( C
    2 A" ^$ |8 ?/ H0 o
    8 c/ K. [, j0 _' \

    2 ~- ]0 T: H" Z' mimport os
    ' Q, J1 a" k* Z0 r+ u9 J
    ' ]1 Q# V- o4 U0 R& q8 zimport string3 `5 Q' H3 C! t( P6 z( S$ E/ O

    ) y9 ?; S* c$ E+ y5 N/ b   0 z, T2 ~2 d# V

      c* j' V* @0 g; ~, U7 O* H& Tdef replace(file, search_for, replace_with):
    ! @1 |2 T: {) V+ J$ u% x# y! N2 x+ e8 x% j; V  M+ R
    # replace strings in a text file( D9 N0 r6 p# y  @8 i3 C( U" W3 ~9 ^

    ; L2 f% X2 M. d   , e* l9 M8 S2 I# E- y: I* o
    ; E. f! c" x1 b. B1 w5 v: M  W, Y4 a
    back = os.path.splitext(file)[0] + ".bak"
    1 w" D8 O' K) K, e& g2 T" \2 @& H+ e" _( @2 i- l" Q
    temp = os.path.splitext(file)[0] + ".tmp"
    $ s8 Y6 _, Y& L! p/ b' s: R
    5 L! g" q7 i5 g$ ~+ J. t; f   
    5 \  C2 ~: s3 L9 y+ m" Y. Q! W, k( x! w1 H9 C& K
    try:
    + R) l, p6 ^0 F
    * ]% H4 M/ `- t5 J9 L# remove old temp file, if any, L8 K1 J5 U4 O  o8 O+ ?

    # E# N2 Y  @+ t& z; Kos.remove(temp)
    ; X* ?3 Y$ v$ i& F# m/ S
    # h) O6 @) |/ N% Q4 A% Zexcept os.error:; N2 }2 l% b7 u9 n, y

    - ?/ H( n( I( p0 fpass& _/ a7 O, G; t( g

    8 I& I' h5 B$ r! S8 ~$ c! Z   
    ) Y) W9 L8 I, C$ O  c- J3 {7 l; l8 i! \
    fi = open(file) #2 J' b! A( _7 P& f# I( i* w. ?0 b8 R

    # e! s9 _, B# z" J9 Ofo = open(temp, "w")        #
    . u1 y! j) m! d3 |# L& w, h0 {" C5 J; l5 [0 S3 s: x1 C/ @: Y
       + G! u0 T$ u4 X* ?4 h, B6 ]

    % u: o$ s, n6 l8 @) |8 zfor s in fi.readlines():
    . M) {3 h( B3 M: V5 M: w. I6 A& B6 @) M3 |- I4 S/ b
    fo.write(string.replace(s, search_for, replace_with))9 L( E; S  A; m$ ^# I2 B

    " T3 C  O) J* V5 U# A9 A   
    + {- ?9 H+ Y0 U# F2 E; i
    5 N0 O( G6 Q. Z/ Xfi.close()' O2 n8 W+ o: E' \( \' Y) H

    ! T2 \; B4 Q& Y( d/ h' Z. }: Q- w  cfo.close()
    * h  ^. j! `# m9 S  |, t; q/ A: ]) `( ]  _
       
    ! d9 B# S9 P4 @7 J, x( F8 W& x$ \, X) a
    try:( D& z/ c" X. @8 k2 j- r3 }& U9 z; g2 e
    1 C, g! P, K% n/ u1 r( |2 s' l/ _) x
    # remove old backup file, if any' ~/ p1 u2 U2 g( f

    * t! s3 Y# g0 J& ^' M9 wos.remove(back)
    1 A! R0 U, T5 T. z* c% m8 ^( ^( N2 x) D
    except os.error:
      W0 O5 q& [6 S% P, M! f" F' J& e! p% D# l  U- A9 `- V( B# @8 Q: Z
    pass  r0 Y4 q$ `' E% X
    ; ~, K) @0 w3 I: @' Z
       : p5 C; G, @/ Y7 y$ p" M

    , U3 |% l, A! R; |  Y0 ^1 f# rename original to backup...) L6 v+ ?6 a; d+ z& _
    $ t  E3 T7 z2 L  W
    os.rename(file, back)9 z! w" R) u2 L1 n7 J6 j# J7 {
    3 G( \, m3 J( F
       
    . _# I) G# W! ], y
    , ?1 _0 ]6 m( F, v7 ]) ~2 W# ...and temporary to original; u" T  G8 v, E, }0 O- t
    & Y6 }) s0 ?, {# ?4 A  D3 c
    os.rename(temp, file)+ f) h' j- Q/ s# w0 ~4 U7 k
    / d7 D! n- |9 d9 b& ?' E' L
       8 X, a! g1 W/ c' n

    - m( m( ]; V5 N+ M) o. @# try it out!+ m4 Q3 M; f- L3 P
    7 V5 t$ d5 |- t+ o, ]
       
    8 i5 t1 N$ D- ]5 @$ Y
    # @) @: `8 y2 wfile = "c:\samples\sample.txt"9 o5 X& n6 n9 [1 P) F
    , T# E6 n3 R& u% V, z  V+ `- S
       
      Y6 Y* y* }! l- b
    6 l0 @" a+ @8 N: \+ dreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena8 a# D5 f" _$ U
    2 k0 ?* M! |" [# y' J1 k
    replace(file, "tjena", "hello")
    * S) s! ^) o* U! E1 e% u# i7 L' C- s/ y
       
    9 c" o; P/ c5 R& ?+ n0 b9 b4 ~8 H* t8 ~  n1 i4 t7 Y1 i
    2. 目录操作" m- m3 d9 a% i
    9 B- L3 o5 g# l$ j2 Y9 s
    os 模块包含了许多对目录操作的函数
    " b! P& o6 D( l7 ]: M8 o
    2 v+ a- i3 U! f0 i. [listdir 函数返回给定目录下的所有文件(包括目录)9 C  U' b) d- i. x5 {" z2 Y
    " t' u4 P% _* T* Q$ [
       
    ! ]4 W) l  p* r/ u: U0 x$ d( l. U1 s$ z, [# F  F% d
    import os
    + f! y2 b& P& F& Y0 e5 H/ k; }( V7 v0 {8 q6 K
    for file in os.listdir("c:\qtest"):
    ' d- }' @" t& j; G- K3 i+ E0 l7 D
    0 H( w  J) i( U' g* h6 Kprint file
    5 t2 X/ R; x' w7 U
    * U# B* c1 O& q   - N6 b# \6 w1 o

    , L6 A9 Z! P! R. j& F+ \; ?6 q6 `getdir 获取当前目录
    ( S' z& |3 {+ z; h7 D' a; v2 q# K- s
    chdir 改变当前路径$ T2 L5 R# Q" L
    7 V4 |; C  F, w
       ; I$ _% N# W0 W# _
    * n& i! r" K# ?5 q3 l) n
    cwd = os.getcwd()
    4 k3 X+ f' y# U6 v: b. x# b$ W
    1 G* t/ d  c* uprint "1", cwd7 |- p) U1 W% k2 c6 D! _6 M
    : B+ e) [; v* l
    # go down
    ) [" g$ w- C3 R% `6 l9 g: J' b  H% M- h2 m/ L
    os.chdir("c:\qtest")' H8 Q& M  q9 R, W$ X9 s. V7 K" E* p

    1 J" S7 t0 v% l* _* Z3 }  L0 C3 wprint "2", os.getcwd()
    $ M7 X4 f2 x7 V. t7 j" f6 J. P* V' G8 v6 w* U/ o+ z# K5 d
    # go back up
    1 A4 i. t: {% j7 w. \* k
    : ?: }' n! g; R# wos.chdir(os.pardir)#返回当前目录的父目录7 U* _7 l- M5 a: K( q4 L' u
    # k) E8 S8 [( M9 h6 k- }% y
    print "3", os.getcwd()
    ! @4 V8 K% r# w* e. L/ |, Z3 i! C9 d1 S3 g& p. X: Z9 O
       
    7 x" `% k- i( j# ?8 I& ?5 ^- Q! H; I
    ! h8 S- w# \/ f/ _  y# c+ o& e; Ymakedirs removedirs 生成和删除目录
    ) t0 O4 q6 w4 D
    % E% _4 M5 @' R1 ~5 @* l9 X  Ymakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除6 ~4 B8 g! L% i
    , a- ?' r( P) A" D9 S# {
       9 M! b2 [9 ~) s  b3 V$ P
    ) P7 C. V3 l: t1 U% R
    import os
    : |- X9 Q- Z0 h: V2 c9 K& Y' m/ y) i) f
    os.makedirs("c:\\test\\multiple\\levels")2 |6 K6 m7 }6 B# P

    " t2 R3 l: y% Yfp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    / [) ]" s7 x4 T  ~  P0 X) q
    0 q. i6 F; w5 ~7 f6 Dfp.write("inspector praline")
    : o# ?6 n/ {. Z' ~! g
    7 L$ d# I# Q" f, r9 W, P" @6 a* w/ G! ~fp.close()
    + r# I: u5 m" i9 D8 T2 x1 I4 s  `! q$ p( h# V) O) R/ @% f3 K. C
    # remove the file
    4 A. U- }# c; U  p% Z7 k. z  Y6 X( m  U
    1 ]# ]4 Y% c: ]os.remove("c:\\test\\multiple\\levels\\file.txt")
    5 w& N6 p- h, a, s/ F5 M
    : ]: U% E$ h7 ]5 p9 u; ?1 H# and all empty directories above it7 D! f; j: `5 F! y
    , Z$ w& g$ F# A" `9 Z6 ]; H8 H
    os.removedirs("c:\\test\\multiple\\levels")
    + `" q/ v9 T, X" j
    ) n9 X! k: r% q: B6 `5 _   8 H; v% S6 u/ w! G* h- {5 @8 G: F0 P
    3 N6 ]  h8 m& c0 T
    mkdir 和 rmdir只能处理单级目录操作.) b, K) n  A' e) @: e& X
    6 U, s& f' a  J$ T. K) P, ~5 U
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    9 s3 Z9 _8 e1 f/ {# o  C! W. j2 ?: K
       
    1 C5 j/ T% B8 Y$ n
    " W/ ^- S+ f$ |+ {3. 文件属性的操作  d6 I4 T1 x+ d8 |; g

    8 l0 u9 {' `* jimport os
    " S& _8 {+ X, X! T' x% E+ D
    6 S( ^0 F7 ]* timport time
    2 d* Z( n- i1 K$ }; i* Y
    + K8 S3 l4 F9 B1 lfile = 'c:\qtest\editor.pyc'7 c" s7 f- n, z5 C6 @+ U% @( z
    $ B& `8 N% A7 {" e6 j' D4 n
       2 H2 g, O1 ~8 I/ E. q

    $ N  {+ d& u: `( Ist = os.stat(file)/ E: A: j0 _* ^
    , o9 q7 X! Q& d! ?- e7 |& u  I8 T
    print "state", file
    # w- c0 H1 V5 V7 o) S' v4 t: a1 M% Y% _+ u$ x
       
    ' ^$ a* w+ ?$ w2 i: G$ p0 f; Y/ Y6 V% u5 ]& [" m
    def dump(st):, G, ]* x1 ]+ a

    5 g# J9 q/ k, p( z; [7 j4 Kmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    2 z3 s4 G* |& V4 N" ?6 ^
    7 \0 K+ L( r8 I0 G, @3 {- U2 h5 eprint "- size:", size, "bytes"
    " Y8 G# F" t( s. `- z$ W' p; `* s2 v9 C  T/ R& F
    print "- owner:", uid, gid% u. s+ p: Q7 t8 Q$ U1 u) N* L

    ; R/ Z9 s* S3 _/ Aprint "- created:", time.ctime(ctime)
    5 t& F; a$ b3 d, J( x& `5 ^$ a+ ^4 H( }! ?
    print "- last accessed:", time.ctime(atime)
    $ w/ V2 U% @7 K3 j" u( H; ~2 n: `" Y
    print "- last modified:", time.ctime(mtime)5 J% Z" m% R) c% b. T5 x2 j
    0 i4 V7 d. C( P2 ^& u
    print "- mode:", oct(mode): k% ~1 r( ~- E& ~) ]0 X5 _
      m. k) b" Y* x* [* v6 F4 x
    print "- inode/dev:", ino, dev
    0 \5 r+ j" \; _  Q) A
    ( T& C, v' H0 c( [   
    5 @9 u9 O0 i# U8 ?8 \$ Q
    * [1 o- Q9 V+ J" V. Sprint dir(st)$ q9 ?5 o3 W* V3 ]" o- }
    1 `1 i2 U; W+ `3 D3 N+ G" S2 q+ C
    print        
    # P% n2 E5 ~  y( d7 S
    5 B$ D5 ~. E1 q' D, H) rdump(st)
    1 N3 }5 A, a* i. j+ |$ o$ x
    2 u+ Y! J( z/ I# print4 _/ t4 C7 r$ Z' {5 b$ S
    5 K) I4 q1 l8 K+ t
       / F* }) s" r. l+ g* H8 ?
    ; z9 N& ?; e, ^( Q/ X- }7 R8 m
    fp = open(file)
    " c0 [4 n% [' x% Z
    2 e- v, l6 d1 ]1 g! i4 ]/ n$ wst = os.fstat(fp.fileno())' X) ^1 X7 }6 U) u$ r

      y9 `9 [* Z) x0 ~/ jprint "fstat", file2 C, A9 ~2 D  h% l# v/ o

    2 l; L  L$ P& `- x4 g; ^dump(st)
    3 t/ {/ K' d, m, Q  ~3 }1 \
    + x; \! Z$ L& B) Q- n   - c1 d0 k" O+ K  I5 V; r; ^) W: \
    # a1 t; u# m: T) R; I* T$ L
    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):- t0 F& n% j3 E4 [

    8 S0 H! E8 I  A& Nos.fstat(path/file)5 |5 L+ W9 n" [1 Q0 l

    6 R2 U( E+ g7 b: G  QReturn 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 0 v- h' Y+ }- P% @) L3 S  E" A
    可以放进文档当成附件下载的!

    # O; M- V, e$ C  L, Y* |很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-14 22:31 , Processed in 0.451797 second(s), 64 queries .

    回顶部