QQ登录

只需要一步,快速开始

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

    $ z( a/ O& w( q: U; Y. O! U
      h' d1 b2 _4 I3 f7 G2 oos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作5 I! ^9 Y( N$ k+ g8 l- _/ b
    # T0 D2 m+ Q" C9 @) X
       
    1 u$ Y$ {. D8 j" W! F
    ( W( d# K3 e7 d) \1.文件操作
    1 I% ~/ Y3 i4 [0 n9 ~( k, R$ I8 B
    + K) ^+ p  ^9 O9 X" D8 V5 e9 V, jbuild-in函数 open 实现文件创建, 打开, 修改文件的操作9 a0 F! E) O# o8 Z

    - Y7 n/ |4 N' ?
    " p5 F1 t2 a" F2 }( y* v7 I. x. q+ i4 U& F5 _+ c9 ?/ A6 ~) u
    import os: ^5 h3 |: t9 S3 Z+ _

    2 K$ O$ G7 ?4 m) Qimport string- {5 r% n5 t! X" G& K6 N
    # ~3 d( t! p0 [
       
    % T' n3 \( `; O$ ^( c  h
    2 m4 @0 e+ \" P- |7 q) b4 Idef replace(file, search_for, replace_with):' u) M& a  H& ?! {% t
    + u' z5 s, u* e1 S- a( |( i
    # replace strings in a text file$ Y3 h! }; `, Y, `8 u
    $ G7 p+ @! b* Y' s
       : X( |: [  A" {9 o
    8 a& Y" K% }" T7 E# B  G
    back = os.path.splitext(file)[0] + ".bak"
    / d9 ~( o, j, [, s/ X- R0 |+ v. _  z, b( Y, U
    temp = os.path.splitext(file)[0] + ".tmp"- N3 J1 u# ?( w
    " \) _0 E3 J2 y$ d& F9 Z2 h5 Q
       % }" v; t; r) f4 l/ m
    " I% a# J8 X  [7 M, U! Y
    try:* h  l8 }2 g$ ?& `$ k

    ; H) q/ Q9 e, m; u0 G% g: {# remove old temp file, if any
    0 B5 [; j! ?' G3 X: F0 m3 u
    7 T  I3 X  D/ J7 g. _) d7 a& Sos.remove(temp)$ Q9 y% D8 p% S

    , o6 ], N3 M' r* G! Y( R9 kexcept os.error:5 e$ `& V# [7 Q0 f6 b
    2 |! ?7 v: {+ t0 r- J+ J4 T
    pass3 n0 s% \2 f6 m. F& g0 d) e
    % ?- m8 |5 g8 h& G$ h6 y! L
       . s3 `4 l& H6 p' X. Y

    0 O0 R- b& B: L+ S. M8 u5 j6 x  _& O. dfi = open(file) #
    8 G# t5 a/ d( f
    " m3 I0 o( D2 q! w# d; A. pfo = open(temp, "w")        #9 F6 G$ X; v4 \5 G: n6 k/ x" a

      |: |0 h+ \  N/ Q   ; V( Q% w! t- C5 c

    # N6 l+ V8 l$ [- `7 s. c$ q9 Cfor s in fi.readlines():# f( `2 A$ f( R& Y1 X: G

    . D: b: ^# K6 v# \# l3 @/ |. Efo.write(string.replace(s, search_for, replace_with))
    & q: @! R& u% g  k# {* o" @, i0 C! l# i
       $ H2 T! ]; ?* i! b: c
    0 Z$ l' Y  ]  y" g. ^
    fi.close()2 U/ M- e! c3 t2 v. z8 v/ t$ z8 D4 N0 C
    5 O/ i! ]0 x: T3 d
    fo.close()
    " T. z$ ^$ B0 k, [/ R; W: ?+ j+ S: N
       3 L# L- |, a8 v$ n8 C) [/ L
    ) e$ h  f8 J$ E0 U% Q
    try:
    4 a9 M, {; T. j
      @2 O' Q  s, Q5 V9 p# remove old backup file, if any( l. h% J( c8 X; n* f
    + F0 R9 Q3 L3 q; z
    os.remove(back)
    ! C/ ^+ I1 t  P7 X3 o5 t& j! D
    ( ?7 I' J& N* C/ J, t7 qexcept os.error:
    & m) d2 [6 f: o9 r" b
    8 c9 v9 q+ \$ E( h% O. Jpass% h! U, P9 q# U$ b0 `5 ^

    ! W3 J8 K  {0 k, G' ^" v8 P& z   " D# g( i# Y: S9 |9 |6 g' I

    , ]  ], i% U( R4 M# rename original to backup...
    ' b/ w( N# H0 T: ?; m
    3 z8 e  s4 ^; f' O/ fos.rename(file, back)% O0 H3 w$ @% x$ N% h- M/ h  {

    $ l% X" k/ J4 Q3 u; S/ x   
    . S* K/ c$ `& H( |+ C8 N5 X+ d0 n
    : ^3 y% C3 x% g3 B1 d+ z# ...and temporary to original. c  ?) J# c6 r4 t3 O/ c% t
    ' Q) R: x* S% c; r9 {0 o) f5 P
    os.rename(temp, file)
    * f1 [+ j8 `8 s. Z7 H+ z: W$ w5 S0 ^) D% d; W, c
       
    ) {$ k8 x! z( B& O$ o% t  u' q# ^
    # try it out!
    & K) _" G0 w) n# H$ q# F
    + V- v' P2 M, T! l. n. \4 B   % e6 _1 O# s, V2 A
    4 S3 K1 ?6 l$ y$ p" H" D' v8 v! m
    file = "c:\samples\sample.txt", k) h' v' D. E5 H4 M6 c8 W. u

    1 Q$ D+ w/ _' Q  N   
    + b( I% Y% T* w9 M& [. g" J4 [- \8 f$ E' I; l2 n
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena' j( K% B' E( A! g, t! z

    5 {) U, c% P, T) G0 w4 u4 dreplace(file, "tjena", "hello"); o; [6 X3 C/ @) u  ^. Q
      J+ _. X3 Y/ x+ R7 D
       
    ; h( K0 s" f5 t( H1 X2 @
    . O( T7 [9 p" e" \1 m2. 目录操作  e0 n6 {  M' T5 p

    4 d5 v* }5 K$ Y+ V( tos 模块包含了许多对目录操作的函数' p. R1 C. o' T) \6 l4 ]' x

    9 W! O& ~- r6 `listdir 函数返回给定目录下的所有文件(包括目录)
    7 h8 c& E1 W, m* W. ?. h. H! {8 C0 m$ V. A$ F% o5 X# \
       ; V) p! m+ p9 i: N8 u

    & N/ @+ s) J( y. ]2 s' Fimport os
    " I) T8 n* B2 j2 S* P, z( e
    8 n+ n% b( e! `, Q; ~: h+ tfor file in os.listdir("c:\qtest"):
    # n+ I: N; k! Y* w4 J/ W3 ?$ e4 F( U, A3 c
    print file# {# a2 R0 q# q: C5 b1 r4 h+ L

    0 |3 `. V% V/ r   : R2 G. G, u0 i

    6 V( N/ K) M4 k; w$ z) Ogetdir 获取当前目录+ a. I0 n; @+ A; J  \* _5 v6 I

    3 Q* t  q) O4 }' `- S* d  m3 Qchdir 改变当前路径* J0 t& J& d6 P$ R4 u7 M! a8 H
    2 _* f5 C6 b  N# R/ K
       
    2 s+ W7 W$ d% k. w+ Z+ J1 B6 B8 E  h8 e3 `% J5 j5 h
    cwd = os.getcwd(), e5 T* W5 A* S, F5 R: r" P
    , E/ H9 H2 _5 @
    print "1", cwd
    * C0 m; ]9 F7 l8 n) H% ^6 D% ?, T  x5 T) ^* o8 S; P
    # go down
    5 W" q8 n* a( d/ {0 G' X5 T2 b; }- Q. z9 d5 `0 a
    os.chdir("c:\qtest")! A. K; T* ^. X+ ^4 m/ Z8 X
    " `) W0 W3 S. U6 n  Z) n9 H4 }
    print "2", os.getcwd()1 C+ c  m* ]* i
    7 G% c; i- y; y. N
    # go back up, g$ f/ a# h; Z; _4 o4 n

    . p4 |4 `4 O. n7 U- ]' ~os.chdir(os.pardir)#返回当前目录的父目录( U0 c* O5 C  b  R/ M
    * D0 O4 s2 s& a  d7 l
    print "3", os.getcwd()
    5 c' [/ Y. F8 ~: ^4 g8 I/ \# c; G) w% R' F0 E
       $ W1 _! f$ T; }) b$ m! f! n/ y

    6 q; F* z% V8 F* f: _0 Hmakedirs removedirs 生成和删除目录
    ( J" `6 k1 S9 M! z2 U& g6 i
    1 f' W' L+ N& T) d5 P7 b' imakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    % D9 _6 K9 ~9 Q2 G. n$ g% N( X0 f$ P! f0 R  \0 k
       
    - U2 X( b. k- ^. K9 x6 N# _" a# q  I( M8 [1 M: p" u+ D
    import os# M& k- L) ?% M2 @- d0 j9 `
    + s; E  H: y; H
    os.makedirs("c:\\test\\multiple\\levels")
    5 S, f, n8 p# Z5 q7 I
    0 [# X: ]' C+ M# T# ^fp = open("c:\\test\\multiple\\levels\\file.txt", "w")/ i6 g2 u2 {: X) m

    4 Z3 \( w6 U! B7 R: }fp.write("inspector praline")
    " |  y' ^1 b$ N5 |3 u0 b2 p. B+ I# m2 r& y9 d1 e! F1 d
    fp.close()& V9 r+ @- Q) [- W3 J
    / @/ s$ X/ l* O6 }0 x
    # remove the file% Y1 m7 n6 \6 E# w7 L) W! Y
    # t. Z, K" e) h8 |- p' l; G- a; ]
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    2 r# j  a/ p& ]# Y* E# Q; T/ [7 r9 a
    # and all empty directories above it
    ; M! E, _: ?' C* c; y/ r2 b6 C. l
    * q. a' q) ~% q+ P3 |1 Y: m  Gos.removedirs("c:\\test\\multiple\\levels")
    - N: N; l9 ]8 w- Q: D* k. T/ P0 q' H! I2 Y
       ! Q" Y; C( i7 b7 \0 ~5 c
    5 T5 ]5 a% H$ W; Q0 \6 Q9 L
    mkdir 和 rmdir只能处理单级目录操作.2 q% N0 m9 i. y+ ]) y# p2 i* T8 x

    . q$ |4 C9 r% R* P若要删除非空目录, 可使用 shutil模块中的rmtree函数
    ) x, \  d4 d  e; f- [  a( Y" A
    4 }4 Q' G. `& H   
    7 J$ L  y  m- `& F5 K) H
    ( y5 M$ w# X. I: o8 [$ B3. 文件属性的操作* i# |7 q5 Y$ p+ T( r! Z
      W! K/ [) C4 X$ }+ d
    import os* D: H$ g2 L" S2 s3 X
    ; x8 c5 T6 H0 T+ U" [7 C
    import time
    9 ^. S* z$ o7 M# N7 ?: m/ D( n/ k- d- M  R
    file = 'c:\qtest\editor.pyc') T; D' j& e6 ]! y

    / \' H2 T/ t4 v" T+ Z   
    0 ^5 U* l( s; w
    & q/ H" \) M& }/ l2 W6 [st = os.stat(file)+ o6 L$ _9 v$ t4 |3 R6 D8 \0 k5 i: j

    8 U/ q+ g$ r2 Y4 x. Gprint "state", file. X' |2 C4 d$ i

    + B1 i, [, L: X& R3 D% t   
    ! N. b" v0 i2 T" Z& U! {  A" d# N2 n2 o! g2 P# u2 K
    def dump(st):# T: a: u2 c, S# D. L% I5 `

    $ b8 |; u6 G1 m% C' c  R9 Gmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    3 k% V9 v1 Z+ H+ e) L. m0 g% m2 \. d* [
    print "- size:", size, "bytes"* S' V( j3 R1 R( L( ?

    $ u# N+ O: z. Zprint "- owner:", uid, gid; h* a6 Y- @2 }
    , |1 e2 w1 m3 O0 y; t  V8 ^
    print "- created:", time.ctime(ctime)
    & A  T& e4 Y5 P
    ! U$ E; k& Q* L8 N) u$ sprint "- last accessed:", time.ctime(atime)8 a3 a) o# x" Y2 D+ G- M

    2 U& B& k! _: Cprint "- last modified:", time.ctime(mtime)- Z1 @* F; n4 b9 F

    + [# d3 w: ~, u* x+ }( R/ L) }3 Qprint "- mode:", oct(mode)3 f: ^: A" \1 Y$ w# x

    * i( z, O& T  W! t- Vprint "- inode/dev:", ino, dev
    $ E" E% D* z( p' ]
    2 Q* H9 w, E7 `, O+ \& s   
    9 u+ [1 ]! c( V; f( N& P& J/ m3 i7 ]$ C; B' ~
    print dir(st)' s4 V! J' }% E0 `! o. w9 F
    9 S3 Y/ p/ @7 f+ @9 R
    print        , c7 I7 ~  t" h; Y' A: R' n
    , i0 F; Q: l: c4 B: ?# ^
    dump(st)
    ' Q+ x% ^" t, w+ z% ?
    . a7 x1 s9 F# b9 [# print; f% W$ `6 v& T4 r- p" K$ K6 l

    : \, l6 {: X7 o$ L& |4 \1 O. _   
    ' `1 G. w  P$ L3 _5 g
    5 {! W4 {7 q: g/ Q7 w8 q' yfp = open(file)# ]( L9 S+ ]% y" V1 ^. W
    2 U: ]7 d$ p+ s3 v, T5 ^
    st = os.fstat(fp.fileno())' F2 ?: q, M5 }2 k7 t1 i" g
    ! K: e4 B- R( G( b3 x
    print "fstat", file
    8 u1 f6 c. t( R, r5 `. D9 n9 R
    ) g$ }4 ]- P- I5 Udump(st)/ E) D+ b  G( p' Z

    ) [, g' t, f7 I1 R: ]9 H; R   
    3 C* X/ q7 Q4 R/ t( X* B6 P$ y! f/ E- y) R7 l* N' n
    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):
      `- E: m+ h. L' b1 t0 c) N; s( ^' [' o* s
    os.fstat(path/file)
    7 M. y( g! T1 b3 C1 [, z0 r( y4 u% }6 V! P4 r
    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
    ! d9 {3 l# B/ a7 J, ?可以放进文档当成附件下载的!

    * h( x8 W1 m  Q  t; h4 w很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-8-4 18:47 , Processed in 0.422344 second(s), 64 queries .

    回顶部