QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2780|回复: 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
    " t( C" [4 v7 |4 g; b% T1 q

    3 s" e. O0 @8 W$ c3 V; Y; bos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作4 J0 S0 J4 f" |/ o% K
    - [+ b+ }3 f& c3 q3 J% Q) E
       
    5 p! p4 H5 ?6 A% o4 |; u9 w8 ?3 ^+ g/ q8 b5 b
    1.文件操作# X. d! j* G- }* r5 j% ~- `

      c1 J$ \+ C8 u: W( F" u  N  m* zbuild-in函数 open 实现文件创建, 打开, 修改文件的操作
    ' o3 p) g& e& p. c
    , O8 Z. i2 @! ?, o: M  \8 e6 v 8 ]+ Z' f6 f9 z1 I, R) X" j/ B

    & @/ K4 Y0 G2 g9 F( p7 ^import os) j( N( ~% r. W/ p4 u/ D+ x- X
      u0 ]" R3 h  _% E& _
    import string' j" N) _5 t2 }

    7 Y9 E2 S* E% ]* f0 z/ Z4 u   ' u. s6 F) H, D  @, }! w

    ; c1 U5 E- I( r# c" {! J6 j  M. Adef replace(file, search_for, replace_with):6 K3 H! N% `, U

    4 Z# m8 S3 w' I  P5 o/ _: q2 k# replace strings in a text file
    ! s7 |; e9 R) E7 L* m7 [
    / S. ]( Z& ]. w6 ?( q   6 |6 T: y' a* @6 F  G2 D9 t

    % f7 L7 `+ S: W# }/ a$ lback = os.path.splitext(file)[0] + ".bak"
    8 E8 d7 `' ~0 n& W- _6 i! i8 u4 G
    4 M& W- x$ u/ ?* G9 N9 A; ytemp = os.path.splitext(file)[0] + ".tmp"7 U! l& f; `* _1 l
    ( ~, E, W! ^! G
       * [& _5 `# E3 ]' _* h; n& F6 r+ x0 Z
    " ~7 n$ Z9 R! J! k. k# M% f7 o" L* Z
    try:! D+ J$ R; s- d2 E

    . B/ u7 x+ p# D8 a2 Y# remove old temp file, if any
    6 W- }3 T! R: J
    . E% ?1 b2 f1 L% q/ _( ?os.remove(temp)
    % D/ F# z* C6 x% T6 v% w
    ( |; {9 K% ~' d4 Nexcept os.error:
    / ?+ ]! x6 m+ L/ l
    + z2 N; j- v, xpass1 `* K, l& E6 M) m) n1 E

    9 O( e6 `3 A( v  W9 Z; n  a+ U   5 ~9 S% ?3 V8 W5 E5 u1 \
    9 A2 k- Z. V% Q" H2 _
    fi = open(file) #
    * [5 u9 N. t  ]. M" _, s7 D" G, [' @' V/ R' I
    fo = open(temp, "w")        #
    : h; C" s. c4 S/ V! l" u! N: p  d" y
    4 d# H; P; `( I$ v4 k! u1 }   , u. k. F; S5 u) `
    : R! Z. @( l+ S: P4 m
    for s in fi.readlines():& |5 {6 T' g' p( m! w1 J5 A! y
    + l! V  C8 ?+ M, E( \, w4 P
    fo.write(string.replace(s, search_for, replace_with))) G2 a  N3 J* M$ U5 k5 P
    % V9 j1 I, I3 e! ?( i/ g( o, S$ G$ O
       # m* i: S0 {9 v% g6 J2 z- Y) I  o

    % I0 ?) G, v5 Q( e: \1 O7 pfi.close()2 {. K( O3 h% B* X
    9 ^+ H! ]+ w3 V3 o0 A
    fo.close()
    0 t8 c  w& U* e  c' M& ?, Q( j1 `) H$ L0 O% r6 l' Q) Q1 ?# n6 e
       & I1 U, J- P9 w( F* _3 Y

      t1 j7 x# b4 W1 z+ itry:( e* W) f. P8 r6 Z

    0 G+ B( u! M# F7 q  ]# k6 a6 d# remove old backup file, if any
    6 V* q: }3 O' i- |0 ^# z; V2 O& l7 T$ C$ w
    os.remove(back); \% w7 {/ K* w/ @$ Y

    0 y& Q$ L& j2 m( P: M  F( zexcept os.error:
      i  p* A! ~1 M; ^$ c
    $ ]: ]4 k( b* u) Xpass
    ! C5 W; ~! t  _1 X
    ; k8 w  `) Q8 h. H   1 Q' g7 B1 x: D1 e9 ^6 b' v7 Y

    6 P" I% T  a4 R3 K/ ~# r  L; u# rename original to backup..." j- S% H! R% X* f. `& c4 }5 G
    6 O! o& ]+ ]8 @3 h' Q8 m2 i4 t9 P
    os.rename(file, back)
    + b% m8 D9 U0 l/ |4 G* p2 y* E% v: ?2 P- X1 M
       ; u% y  c8 o- \7 N
    & y' _% L5 I8 P6 Q6 c- p
    # ...and temporary to original$ B" Q# z0 p6 x3 M2 `/ ?. A7 O

    2 v6 Z5 |0 t. ?os.rename(temp, file)/ T* ]1 V3 T$ L# g1 Z. H

    4 m8 \3 K2 K% E1 H   . F* H2 ~% Z4 N& {

    & _/ k- o2 F; d, Y1 `' k# try it out!
    $ J7 U/ A* ^/ ^- ~! }* S* E2 f/ q) {2 D; n1 [+ d
       1 P2 [) r6 Q: R
    4 p' o% u. A, m, T$ l9 n
    file = "c:\samples\sample.txt"$ b% a: l: D" H  N/ @: f! ~
    # [3 O, [& X+ K, }
       0 x. P# I; z: p; @- N. e  V2 [
    0 ?3 C; K# ^( g' ^: a+ E5 G/ T
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena, P, K  k7 a5 Z2 q. f/ N
    0 O, W& N4 D( O4 B. X6 t
    replace(file, "tjena", "hello")7 a) g6 K! W, b: `7 V

    3 W; T; d7 u3 [& ~   . r$ c5 E: s  @' w" n* c( |8 P% q- d7 h

    : g: e& k0 N8 S# F$ d$ O2. 目录操作9 Y% c& O2 p1 ^$ w. @

    ' y8 O% t3 F& r' t, N' b& Cos 模块包含了许多对目录操作的函数/ X0 i, I1 }6 V6 S# @6 j

    , v. a1 I. K5 @8 rlistdir 函数返回给定目录下的所有文件(包括目录)6 c6 O4 G) h. q& y# T+ d5 N; I& u

    8 `: I' |' ?/ q( Q$ A  e$ \   
      O$ B5 A2 `' b2 h+ ]
    ; ^3 G4 U4 [1 [% L8 Aimport os2 i& `+ d7 l' T
    ) K8 \! E2 T6 P# o, V6 b& P
    for file in os.listdir("c:\qtest"):
    6 _* |2 ?9 H" X) P' k8 g5 n, f' ]; M& x7 v/ E
    print file! ^" q) I4 n' M4 F7 W( f
    / }' W% B2 o+ \- y3 ~
       . _4 ]7 O/ T! W. ~7 x+ q% E

    . N1 L- t& @3 b, j8 v2 c: {* m* Dgetdir 获取当前目录
    7 L0 w; B& U/ R* W
    2 z+ X0 u1 m; g+ c  pchdir 改变当前路径
    ; c6 `' I4 `5 u8 |0 h2 h2 m8 m" g: b9 m
       
    " K* X/ T, {& M/ |2 Q. o) o6 Z7 d5 v! \& G1 F0 N/ E0 J
    cwd = os.getcwd()
    ! O. B1 p9 M' }* Q7 h$ F, }- C2 f( {- G2 N+ J1 }) N8 R
    print "1", cwd4 c; E4 l1 H$ B1 g! y' N2 D; x$ ^

      [6 P* }! P- a# ]# go down- Q2 @8 G4 u+ x; a( T3 j

    ! z; ?! Z" E6 E# Zos.chdir("c:\qtest")
    . q2 \! u: c. [# P' N! f* a
    3 f3 F+ i4 y" F3 M7 n2 Lprint "2", os.getcwd()
    ' v; D0 Q( J. V8 f1 r  y, x9 G$ p+ G" b# d0 N
    # go back up
    + F1 m. T7 E, T4 z4 h, _! d/ e. P0 r
    os.chdir(os.pardir)#返回当前目录的父目录1 a% H  A& J" P1 X# L. n$ m
    2 X4 b9 G" I( q' o9 L8 |
    print "3", os.getcwd()* T% L+ a4 S' j3 Z
    # Q6 u7 }8 ~; H# h6 B% w1 \% ~
       
      Z1 S/ H$ L! z% K' s) U$ q5 {5 Z0 {# _" w! Y
    makedirs removedirs 生成和删除目录
    " m6 t  b' f" }5 s" R* ?% Y/ y" _3 U1 t# r* |
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    7 A: p$ X! D2 Z* t4 E7 r) k' M; P: `9 W1 E1 I4 ]
       ! P: v3 n6 r2 `  J6 R- [" E

    ; X2 Q1 W. n! b5 G* eimport os
    / H. }! `  _& F( Y- l
    * n. O7 ]$ W' ~8 cos.makedirs("c:\\test\\multiple\\levels")
      q7 U0 R  u+ p; p$ F* [$ Q$ W( t/ p9 V) W" J1 e
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")& R* B! i5 q3 ~, S

    ( V  I6 b' @1 F6 H8 l2 [fp.write("inspector praline")
    2 O1 T7 o, c. g7 }$ j" N7 y- A# g
    fp.close()+ w: o5 `3 _+ Q: F0 L

    4 k4 s1 E& `$ G) K, G3 w# I# remove the file
    $ n% m; i. q; |, Y. t- Y/ x, w  j
    os.remove("c:\\test\\multiple\\levels\\file.txt"): W  ?1 q6 M! u% u. D

    " a+ N) p5 a7 T. m4 L% z# and all empty directories above it
    . U6 E% [: t, N  K( q
    # ~% B9 c) ~5 J, a$ c- z% Jos.removedirs("c:\\test\\multiple\\levels")
    ; f7 x9 m; K7 o6 ^7 Z& [7 F+ B% `% Z* x7 D4 }$ v. U) z
       # V$ m$ [5 ^: v" ?  w& Q% @9 \
    * r0 c: z5 _5 A7 \- O) o1 p0 M6 E
    mkdir 和 rmdir只能处理单级目录操作.6 b: s& M* e, O

      c7 [+ q- E5 b! o1 S若要删除非空目录, 可使用 shutil模块中的rmtree函数
    ) Y2 Y) _8 \  @, a7 T% z8 P8 S9 s0 p. H  y
       ) E9 N+ J, o: E+ ?. E
    $ f4 U; `- B$ @' ^
    3. 文件属性的操作* M: x' x. W$ a
    ' t0 n$ d4 Q* W8 l7 a! z: l7 k
    import os
    $ {9 _% @$ D8 D0 u( z4 q+ B4 ?; y' _
    import time5 {& [. c6 ]7 }& A) n6 K! J! M

    + F4 K1 [. _6 |9 L8 V, @file = 'c:\qtest\editor.pyc'
    & M3 u( l/ A5 t2 |* {1 v! u$ T
    * i, v1 f2 y- P7 m3 G   ; o$ ]! e; b3 n5 Q. ]
    & q9 k6 e) ~% ^0 Q; l$ e3 I
    st = os.stat(file)
    4 H9 W0 ?( f& y1 R- {; S7 l. J1 B( Q! Q" J, @2 R8 m
    print "state", file
    ' m# x: t9 F# b0 P* c! J) o" q# s4 K9 X
       & v. D1 @! T( T( s# e3 Z6 F4 S

    + L& o: p/ E* `' o4 xdef dump(st):0 Y5 ]/ Q8 \6 m9 p
    % h- {1 R4 C3 l$ J
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st8 a) u7 o" u( v) P/ c
    4 a3 D) B2 k2 s# K7 H3 A
    print "- size:", size, "bytes"  Y, k% C9 I5 _9 p9 J# j# W$ s& e
    ! X6 @' t: |! F4 B, N/ k8 _
    print "- owner:", uid, gid
    1 b+ m! x! p7 W0 }
    " Q/ Q5 U1 Y/ ?print "- created:", time.ctime(ctime), R9 O, p6 ~) h! ]& Z6 g% U
    ! u! `* b! N2 k/ E
    print "- last accessed:", time.ctime(atime)
    * Q4 E8 `; u8 m6 L/ d' Q+ L7 \9 V+ l6 H; v. o# J" \8 s8 l
    print "- last modified:", time.ctime(mtime)5 H+ T( p( O# v  [; t7 o- ^
    & X2 X4 K2 s9 h# H- I" F
    print "- mode:", oct(mode), w2 t$ b: I4 D; C

    ( F- c& E4 p4 ~( f# _6 nprint "- inode/dev:", ino, dev- @* B0 M& I5 i' m# E

    5 N# k' [9 A8 X# ?( Y   
    . B5 {$ o3 E1 A! m' m5 n( f
    # S' @6 X7 z3 h' B& gprint dir(st)( m; A# w# V4 E7 ]

    # O; t( |7 K1 F8 I: Iprint        3 m& C( B/ O5 K2 e5 b
    . \* p. e4 x& Z
    dump(st)3 m) l0 V6 `0 ]3 A9 U# a
    ) E6 K6 t" v+ W
    # print& U& S$ [) r& j6 |5 b9 i9 I# r. X/ m
    2 P  A/ X1 U0 }' l1 Y: ~; m" U" R
       2 {3 H7 p% s- z1 |$ F: k

    # Z; O( K; j( A; Xfp = open(file)  m8 f1 A; y' }* K8 x9 d* u! X
    ; N9 c$ S- k) V3 ]
    st = os.fstat(fp.fileno()). ~6 [; S+ ?( s

    * s) w0 P" ~. E/ D! }print "fstat", file6 }" Q+ [8 }# w9 s! s: l, F

    ! y- ~' N" J2 ~0 ~# p4 sdump(st)
    ! J1 L0 O7 F0 G) E7 S8 J
    : n( Y$ E/ A' w. a$ ?! @  [' K: h1 t3 {   
    # ^) E; n! q3 b/ F+ D+ o6 H- q; I- M  z
    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):
    ( z! ?5 t1 S: ]( ~9 o) ~. s9 M0 ]+ U$ T& E$ c. D0 X+ R5 W4 V  x5 }
    os.fstat(path/file)2 K' a0 I. y0 i" ?
    3 h* T! t5 W- {- [5 M
    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 5 n3 b/ c) P3 Y  h, k
    可以放进文档当成附件下载的!

    9 V$ i  V" W. J) O1 k; G5 C, y很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2024-4-29 01:03 , Processed in 0.404413 second(s), 63 queries .

    回顶部