QQ登录

只需要一步,快速开始

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

    3 U& Y! L$ c! I
    / E3 h( ~/ w. P) xos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作: i/ \! i5 \. C! E" }% ?

    7 c% _' W2 R; E/ O/ c( v4 }   
    + f. A4 |, u8 ~6 n) E/ [6 |) R3 [; c, ?/ E: M- C
    1.文件操作5 o3 {# z  M3 ^# L) L# f8 @
    - Y% n) W2 T7 T7 E% H
    build-in函数 open 实现文件创建, 打开, 修改文件的操作( L0 `! B2 Y+ \- ~# o' A
    / b& d( X- R- i0 N
    4 R7 F- h/ u+ P( f) t# z0 p+ E

    + U4 g* O& B- w6 u1 s" k+ @" _6 ^import os, s2 ]8 P; j4 x0 {+ d

    5 f$ @& p$ |% d, uimport string
    $ C3 g! n4 M6 L4 {% e
    ( B" A6 C* h7 d9 G- w6 B3 T   2 m# k! x- J7 U3 l7 _8 m* ~+ b9 f
    " m  O& ~/ z: H7 X& j' h
    def replace(file, search_for, replace_with):
    , h. m/ L. O3 U2 d; n& \. v
    1 T& u, k/ Y% \: s, i  }# replace strings in a text file* K6 f8 d9 b6 U
    ' v  P( E) I  ^3 X2 K! s$ Q0 H
       1 B3 b0 d9 j3 D9 o/ w

      }6 y7 G4 X# B; ?9 W' Xback = os.path.splitext(file)[0] + ".bak"
    : U: o$ P: K( |) J, b0 Y2 G9 r! p9 x
    7 _3 w/ l0 Y2 Z4 H( _! e+ itemp = os.path.splitext(file)[0] + ".tmp"
    + s. ?7 D  K( R8 W
    + x# p$ z; Q0 l9 Q. k   
    # U5 V: U# k5 y3 y# ^4 H0 c- d$ b: d
    ! Z( w% E8 Y) d. Jtry:
    / A$ m. w. Z/ l( s! Z8 f! b# d
    # u9 v( W' S, _# remove old temp file, if any  q* F1 l# r5 _( L" _8 u7 P' b! ?$ h1 e

    ) m, k. S( ?; tos.remove(temp)
    " s3 q# A. u4 a, s2 ^8 W3 `
    5 }: L9 R0 G# q9 }. Qexcept os.error:
    $ c7 R7 r/ @/ P& H8 j7 M+ n! L* n- B, o4 [
    pass. k7 W8 N9 @) R0 j: m+ U

    , q# j$ Z) L3 `  w8 |   8 P( n+ [* }. b7 C

    0 W4 R9 a' }5 Q* O: zfi = open(file) #
    ' C; ~1 I2 E# k; A. I( }! _& L  b% b/ w. ?9 J
    fo = open(temp, "w")        #
    ; z) b  f: I9 ]. J7 N8 j/ C' S2 m. ]1 }+ m% J' W
       + q0 k7 ~8 m1 L4 F

    ' K, T+ R& @# `+ }4 Ofor s in fi.readlines():: h" K, Z+ }( i

    / i  I0 _6 s7 l2 Q$ Afo.write(string.replace(s, search_for, replace_with))
    # n; e% y0 C& q2 B! N
    8 O; Z7 L4 S0 n* Z- t/ z3 r, {/ E; k# W   . J$ O' r- k8 a4 W
    9 r: Q8 [+ D. _  X
    fi.close()9 S2 d/ U# [/ k2 y. p% Q
    % J5 K; Q% @1 U
    fo.close()
    . v* J' d3 c5 G" v0 O' f5 B6 o! k
    4 u; ]" `; W5 ]3 r  [6 I   8 E: \  B  ?4 u( J' s
    , I9 d% A/ g7 u! e- o8 ^
    try:' W- k! {  D, w: c

    " _5 r& |4 `$ {$ G- X. z1 @# remove old backup file, if any( _3 I% ~* ~# ]% ~. U7 \: i

    0 O0 E" k: R6 V3 n6 j+ F: Oos.remove(back)& \3 _' e8 H) r- j0 F/ k) J
    3 e$ l0 h) C+ T2 @) w
    except os.error:
    9 G% X/ V# j# E1 O; H* i% x4 N1 b  e" \% Z
    pass. B; R7 |; V0 @% l, g5 V

    * O  ~3 j6 p5 ?' y. h+ f   
    , |0 P' B$ B3 p7 Z* O6 z" L* W% N1 `% I) [5 }# @, a* y
    # rename original to backup...
    ( y. b6 m; R3 T
    & w3 w2 |/ i) ^3 _$ tos.rename(file, back)4 m7 n" V/ ]% ]7 [! k+ m
    ! a. r4 T' o/ M- O$ ~% U* _
       5 \' p1 n5 ?7 ]5 z
    5 P* w6 H* V$ K) b% b5 F
    # ...and temporary to original6 `% j# R. [! X3 X$ S

    - x2 ^( d9 ?1 k1 Vos.rename(temp, file)- i) S9 a% ~* W1 ~

    : U( v7 M# @1 Z   
    ' N8 e2 o1 v" o$ S& A- D( L. Z& R" g
    # try it out!1 X: q; s0 T1 h. N, Z* d& S! Q

    1 ]# O! h5 C4 t2 C7 d   7 N5 X! j" ~( @' x2 q* n' O
    4 F! x+ a! F" C* o3 t: p  l
    file = "c:\samples\sample.txt"/ ^  w) P+ L! v) J+ n8 M
    . L3 v( ~$ o0 Y! f; o
       
    3 m5 {: n  O  s* K; G0 A* h3 x: s# h( v( l, b* \& m) ]8 Y, ~/ f
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    3 ^/ H; M0 q, _- L3 ^2 u2 y, d8 c; m4 o  P9 U  Y2 a0 h2 l
    replace(file, "tjena", "hello")2 [& p9 W* Q7 E0 y

    3 @" Y; k1 g* J   ' H6 P8 F& \9 J3 ^# ?0 F

    & G; Y3 g- [, |( t2. 目录操作
      F- Y4 [7 W0 A8 r6 p$ n. S# l8 L  H4 }, e/ B1 L
    os 模块包含了许多对目录操作的函数
    0 G: K9 }6 {: l' o' u; M7 Z! V2 d. r4 f
    listdir 函数返回给定目录下的所有文件(包括目录)$ E( L' v# v) W7 ]" n" w

      c9 _' l' _( [9 v, v   
    # N( H. q% [0 V& e2 {
    , a( J. x, h1 _7 J/ E# V1 \  m8 D, Pimport os
    ( U5 p4 h6 Q; w6 u2 x/ }! P/ F$ R# I( e$ d3 B' h
    for file in os.listdir("c:\qtest"):
    . ?- a4 e9 b5 {9 u; O) X+ M. }7 U9 A! u" M3 J( S8 z9 t
    print file
    ; h8 f5 z" o/ X, h6 ?) n/ e: `5 P! n
       , V' v, l* k- w( H7 ]
    * J3 O, a+ ?, m* Z3 f5 p
    getdir 获取当前目录
    * R9 ^& n# A  t1 ?
    - t0 C2 o) |6 H; T/ Fchdir 改变当前路径
    ( k( r! f) S' p7 o& O" M. Y. d4 b' ^
       
    ( ]  W8 {0 q; |8 C7 X$ `# c" A1 J) b. A2 ~) S
    cwd = os.getcwd()& a- S6 \: Z" n$ x

    + P: F7 g6 y( X8 P* bprint "1", cwd
    7 O" J' j: a0 h$ |. i! Z& {4 M, I* O4 N: {6 V, Z8 C) s/ A
    # go down% ?1 f& E9 y( m  G' K( D4 K7 G7 I
    * Q$ q. u! r- B( z4 e, `4 l# t
    os.chdir("c:\qtest")5 o. P" U# o+ y6 P' y

    % L. t  y8 _1 X! M3 J* z% kprint "2", os.getcwd()5 w& ?+ B( ^$ q; Y$ _5 G1 H

    ' ]+ j, F$ r' u6 Q7 e" f# go back up! v- h$ K$ G  V

    , g$ `9 V! X+ o( _; X! xos.chdir(os.pardir)#返回当前目录的父目录
    ) k$ `9 C% l8 g2 C: y- F2 _- \3 g7 o/ C
    print "3", os.getcwd()
    . a0 o* J- P+ n* j1 D1 ~' H' f
    ) M( z. H: u( o) Y   
    8 h* ^- [6 H6 |7 u$ W* L2 b( j
    * f( q' ?' F; F* T& s, cmakedirs removedirs 生成和删除目录; O3 x* w+ J6 m

    : [/ B5 k' L. o5 f: X+ K9 Qmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除) K+ s; u" R  |9 ], N6 l

    ! j  K* w4 ]* j4 I7 a; D, O) j   
    , W# `9 ]2 Z6 Y- W! M5 o0 c( Y- V" e$ H2 B' j1 M
    import os
    + C' i- {# n" c8 X
    3 w" E  s0 E; }os.makedirs("c:\\test\\multiple\\levels")( Q- A6 I0 C9 u# j6 _
    " }# U1 m/ J6 E5 K. N6 m
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    - J$ ]0 w% x; _( b  V# x
    * J7 f- }4 T+ X& ifp.write("inspector praline")1 I% h/ f7 s, T2 A

    5 ?1 {9 ^1 ]  `fp.close()! J% N$ o3 ]6 E- O! o7 H- N7 J

    - r' k6 {1 w6 D# remove the file
    ; S; C) ^6 Q9 ^$ g
    $ H% B0 _3 q. o3 ^& V% f0 V" v: Tos.remove("c:\\test\\multiple\\levels\\file.txt")
    5 _& q1 f( ]- I& \& @
    ( I" @( O" P% c2 a% D( L# and all empty directories above it$ i5 v3 o" p! i/ p+ L( V

    7 p# R( K# ^2 ~7 xos.removedirs("c:\\test\\multiple\\levels")
    ( a! N& f5 S- f4 ~% f9 X+ J
    5 o, f) X5 j4 D# W6 a+ Q; o   6 D! X9 g0 x  Y' m
    + v2 z- O1 G4 b9 C& u3 _" t
    mkdir 和 rmdir只能处理单级目录操作.
    7 ~: _+ m& r4 g* L, [0 {5 `
    ! M- ~7 _, o! l若要删除非空目录, 可使用 shutil模块中的rmtree函数
    3 w2 Q2 L2 m. U" B5 I% F
    % B& X, @& S- [7 C( g0 {   
    1 t' M+ k1 E5 K$ M  l/ ]% e; |8 C) q8 s- U6 G% V; e
    3. 文件属性的操作  ~/ M4 [, N' B3 P+ V, x# @
    & S, u- ~/ d2 t- F8 p% e, G
    import os
      i. n2 C% I! l! m+ ^9 P
    5 U7 {# v& o1 |: c& c# o& ]8 fimport time
    ! x' t% U; p0 j9 j  s( p. K& P3 u2 d8 L! t) z2 D  c( \
    file = 'c:\qtest\editor.pyc'
    9 _7 E/ J6 s' G: p& A
    ( W7 b$ {% W5 m   
    . l6 h% T* c  e! n0 Z) a; o/ \
    # y! s; K* F9 t  s. k  T6 p# C) Mst = os.stat(file)
    ; G7 P9 V+ r5 B- [7 a' l& g: ~# i5 B8 h9 z$ F
    print "state", file" @2 H; W: m; Y6 Y& C( v$ h
    + w/ U2 `$ n5 W0 [6 H# }
       0 K4 D* C2 Q8 g2 J+ n8 t
    % w% J7 i* `0 I! \$ M  Y
    def dump(st):
    # o) \' t  q& E" z4 f* Z9 O3 c/ Y1 d( w. ?
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st& V/ E8 s( ~1 c( l5 z* j6 h

    : M" G- C# H. h# Z$ N# k( P- s6 X7 yprint "- size:", size, "bytes"$ r6 `: ~2 m/ x: o7 J
    , l: \  d+ c: X
    print "- owner:", uid, gid
    . p: S" `% C7 G" i2 ]
    % T% K9 U. u( Fprint "- created:", time.ctime(ctime)
    & D4 l/ @; o+ n. l, o; a$ y# g2 m
    4 G) B( |- r% gprint "- last accessed:", time.ctime(atime)9 V3 `) W3 L* H7 i
    : e) B5 ~0 c% }2 Q
    print "- last modified:", time.ctime(mtime)
    ; t% j& ?7 m- o* z4 V& ?4 L9 K, r7 r/ f8 _7 X
    print "- mode:", oct(mode)8 }3 ^9 G6 ~/ j2 ]2 F
    7 ?% V- \0 v, c; C, n
    print "- inode/dev:", ino, dev5 F1 @& A9 `7 T& h. X1 S+ P
    1 q# v0 [2 ~. g: j
       7 q7 M6 s4 T- t6 z

    7 F; i) W! Q0 \print dir(st)3 b* I) I$ P; t9 }  d& W

    # ~, F1 G! n1 A* i, Tprint        9 K7 s6 u3 P/ Q8 r- {. I
    * E0 i& T7 m! @- W: G; g2 n# C1 X
    dump(st)
    7 f; q! o! E  C% S7 O  X$ O2 @% S9 Z: ]5 }/ e% i! W
    # print
    ) {, ~! s; ]. c$ H( y' B: y7 b' {
      R8 G) u6 X4 d6 c: T9 {& z( I0 D   
    0 ~, B% u0 H( x
    ' U$ V" P0 I7 A: O# w# ^  ifp = open(file)
    3 I7 V! ]8 q+ y( n1 ~
    9 r' l2 W& G& ^( `- dst = os.fstat(fp.fileno())
    ) o% N7 {9 F' Q+ c0 K7 f$ n* O- _7 q' G* O
    print "fstat", file
    0 F4 M5 p: Q5 I3 l4 q8 s
    ) b% k7 V. c/ a$ ydump(st)
    / `) n, R" }" N: M8 H; Z5 k: p" ~2 H; f( G
       ' @$ F1 J  x- G3 _+ _; W
    . z7 s% ]6 j, Y  p9 ?9 e% O) a
    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):0 P1 J$ E- G- _( A$ v. Z) K
    4 |& c* c" s$ w5 ~( h9 p* W
    os.fstat(path/file)
      a/ H2 G0 W+ ]* n3 A; l7 E8 y4 @; X5 d8 I+ p' H) o
    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   W( W2 E: o" y. R7 [
    可以放进文档当成附件下载的!
      ?2 h- m( e: u& |' Z3 D- o5 A
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-4 17:59 , Processed in 0.581370 second(s), 63 queries .

    回顶部