QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3792|回复: 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
    ; y( z8 c, j+ l. N' D* R

    , A4 S$ B0 o- \# R: zos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作2 j( Z8 r; L) ]3 I* \
    # O# ?6 H5 W( m, \) P  O
       3 e# h$ v* k, `/ S3 u; H$ w$ b

    * h2 `5 r- u% V1.文件操作& y+ m. P# V- H/ M* S

    2 Z! P) c3 U3 w3 E1 kbuild-in函数 open 实现文件创建, 打开, 修改文件的操作7 A! g, O  n# W3 E/ W) P
    6 N% }( u+ E! f$ v$ c4 c3 w! l/ g
    % M' @0 k% ^; \
    + Q! D  r4 R0 h" H# _2 }
    import os
    / E+ ?, y, Z- |
    3 Z' \3 ]5 y8 aimport string
    / X% V+ G/ ]" A0 Y
    . P0 A# C3 D. j0 H7 j   
    & j3 e" ]! E& Y' ?" |
    ; s( x4 S5 {8 w, P  R* v) Q. Kdef replace(file, search_for, replace_with):6 `# e4 n0 V* A* k. C9 {

    ) x# V; F: b8 ~$ S# replace strings in a text file
    5 R+ {7 B) H9 ~$ ~" k/ }1 v
    $ y, h& W: \0 j2 O$ L9 J   . h6 [6 H" h' E- O+ D" c5 T

    7 Y# }, {6 N; aback = os.path.splitext(file)[0] + ".bak"
    + T  B: k7 \5 X" S# w+ n" J, h7 g: b
    temp = os.path.splitext(file)[0] + ".tmp"
    7 X, J, O8 _5 p! n! G" {
    , U; m; W* G# m! Z5 a   
    " a- d7 c( q6 {# u& u3 s  ^: a5 p5 ~2 j  l. B1 o+ y6 N* Z8 c/ W
    try:' z& \* \9 K3 k9 _# m' f
    6 L# f" g& u) k- q$ i
    # remove old temp file, if any3 k& R" A  z) C# S8 p* [& [" }9 f
    1 j! Y! z% f, H+ y  C
    os.remove(temp)
      m: s6 ~8 H, C7 ^4 m
    $ n: @5 G3 n% e& P# f% z1 Zexcept os.error:
    " e5 L5 r* P! l) Q$ ~% A
    $ c  E+ ^8 R8 A/ I/ Y( ~: Jpass9 L# X$ ~7 o+ b5 L- t4 b

    5 z( c1 w5 p0 v% d- \8 F$ n, r   ! x* h) A  s& ?, I) S. b
    . M9 p/ Z$ t3 S3 G% }4 ]* P
    fi = open(file) #
    , A0 ~* P' m" {5 P2 \& C7 P6 `/ l# O5 D% F2 C8 W
    fo = open(temp, "w")        #
    4 g8 M6 z9 t( t- }) x. U; L; o4 B. ^6 W& J. j
       & B5 W4 x7 k8 m7 x# B% x
    : |1 `3 K* _' K4 [% F2 ~
    for s in fi.readlines():
    ) T  C; j5 _8 t* i5 |  \% p& G# ^1 G# Q% g; z3 P& G% U) z
    fo.write(string.replace(s, search_for, replace_with))
    & R/ \$ Z8 S( O  s% A3 N; H4 F+ k
    & g. j; i3 J7 F% _   
    ( a" b! g7 n: M- w9 M# A% u. }- U  q9 U$ s0 V0 P9 j7 z7 }
    fi.close()% w- z/ C) U( B* m& U
    / ]; W: E4 N7 k! H
    fo.close()
    5 ]. \" @' ^$ M; `% E8 V
    / V# g6 M5 Q6 Y, X2 ?6 F   
      s5 G) j7 _$ N6 e. k9 K" D. Y( M, L* N% |8 k- _; g$ C/ e) S
    try:' Z$ F8 @+ a& X- D/ u/ B
    - p" b; c; y4 k& Z" e
    # remove old backup file, if any1 Y3 O& }' Z2 G8 h5 P

    8 H# ?$ A$ S$ p; ]1 xos.remove(back)
    $ M  Y2 {: h" K- k! e& m/ p, `% q: N1 O# N
    except os.error:3 [4 }2 ]% o( k3 q3 G# P
    4 J/ J$ P" r1 g/ G9 C+ i( w8 B
    pass
      m# j  U0 W$ w) Z9 o
    ! q8 j" V, T9 I  J" C9 u% J( N4 n   
    % D* I8 i) ~: B* Q9 v! d1 s( i6 |- B5 W$ V3 g8 Z6 g5 I
    # rename original to backup...
    4 q  m' O" x# \" D) C2 {- w3 S* O& L; {
    os.rename(file, back)
    2 f; y+ j, I0 K+ z$ t; B4 P
    . X/ b/ P; e% D   " k8 d( i2 K" l- P
    5 ^! z% T& y& f& R" \& k
    # ...and temporary to original: S5 H/ q. L; L* L2 S
    " W) g, x! A; f9 x0 g; N- f
    os.rename(temp, file)
    . |# E, S3 J+ _5 P
    ; M' N4 |0 [; \. S$ k   9 u8 j# @2 I& R5 c

    2 \2 b; L# k. d$ l6 \" t# try it out!5 h( E4 H* G( w

    ! G  R* _0 q# |6 l2 R   
    5 `) X% z% u$ l  Z0 `3 j6 o  l9 r& B# r- X
    file = "c:\samples\sample.txt". H  Y% A$ \3 z9 A, o

    1 E4 ~- {3 ^3 U# d: w. x! m' ~1 R   3 E6 q& Z$ _+ `* D1 z' ^, j

    - D4 H" Z, [0 ~1 j3 K0 rreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    % S  \  `% K1 |% ~8 S+ V. E$ t/ V, W5 i; t. ?8 F
    replace(file, "tjena", "hello")
    5 h$ P6 A* Y% S/ y0 y8 u3 A
    & F1 U  O, X( E2 U   
    + N. y5 e# `2 X
    ; L4 v, @" Z& g& s$ q7 b2. 目录操作
    0 u# P0 o7 [' O4 O( R- |$ m: c" k; A9 J6 X# p5 q. }  t
    os 模块包含了许多对目录操作的函数! D  y0 S; ?0 u7 z% k: [
    0 m! ]# p" O6 }8 O- _' l; [0 z) Z
    listdir 函数返回给定目录下的所有文件(包括目录)
    - P& \! x. f& q( U# f$ E" [3 G) L- p* p4 e: @( Y$ ?, ~
       
    ) L1 K0 V7 k2 ?+ H# h7 \# s+ K1 p) W" n: J% i. w3 k/ Z
    import os
    ; u0 J3 J- B5 j- r. V; |' k' K) U
    0 q1 W) ]8 W% t' d& Hfor file in os.listdir("c:\qtest"):
    , w/ g) @1 X* h7 e7 ~' H; y
    & |/ J4 U+ w  u- vprint file
    , B' V# q1 b3 T; M
    4 C6 Q& n0 ?, M: O1 ?9 `. p   : i9 }5 U  R) V
      E% M# K- k+ n* B2 _% q
    getdir 获取当前目录
    0 [. C1 `# \5 R& c0 {$ ~: m
    7 R; R1 {: O7 s; Nchdir 改变当前路径
    + c: b4 B" r: P" w0 \6 h3 p2 f  Z6 ~8 G; u4 ~, D$ `
       ! |; w- g* ~$ I) Q2 s
    ) d% w$ G* C2 a) b; S: p( y- j
    cwd = os.getcwd()& [8 y) Q- y1 G, t& Q
    ) T+ e$ j' f+ S' q+ R8 T4 w; X. O6 M
    print "1", cwd, K6 I8 a* \8 M9 W
      Q. d6 @2 k3 E* [' x  R/ n
    # go down
    6 k# B% U' ^& M6 |& I+ X- o" _. C9 e% _$ W$ P1 D7 G
    os.chdir("c:\qtest")* L9 _8 m0 k! {2 K% c
    ) j5 |, O$ |: v! J& w
    print "2", os.getcwd()1 M8 j- C5 _% i0 Q! N
    ! a1 G7 Q4 n/ S
    # go back up! D+ t- `. W- W# z4 A

    ! }+ Q- C3 ]- I" dos.chdir(os.pardir)#返回当前目录的父目录" Q! M- D5 X) b) _: y0 G

    . m( j! N" S% F* Z- jprint "3", os.getcwd()$ o/ G4 a( r, r6 Y0 x2 O( T

    ' q6 s* V; {4 v/ P4 g   : S2 W! R& N3 I; D% N
    & a: ^; q: S$ u5 H- O5 l# O# J' b
    makedirs removedirs 生成和删除目录
    4 t- ?/ }3 h* b1 |2 H
    * _' j+ B" b# Gmakedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    % P' J5 A% L; q9 m
    4 ^; h+ C7 ~; L) H, K   1 X4 B1 N! T3 }

    - [& X4 y" z. s- E& iimport os
    3 P5 \' |, k, b! k6 l, D: Z
    * f9 O- h- j" N& f! Zos.makedirs("c:\\test\\multiple\\levels")
    0 o, c% L! k7 D% K; T! D* P8 w  C; j5 H, ]. i4 K# A
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")9 [7 N* ?3 H, i$ e
    " w. R8 g( Y# p9 q% [
    fp.write("inspector praline")
    # O" o" s7 T# Q8 U. t7 F+ \/ L3 _7 g: T
    fp.close()# P5 w7 ?; g5 h% ?- b& v& _

    2 u6 C' o& N; b' R4 C1 }& [7 v# remove the file! D8 _% r" F/ f! L: K' y

    2 \& }4 N+ @- ~' H% k- E( uos.remove("c:\\test\\multiple\\levels\\file.txt")
    , H8 B. G& t4 ^7 n# [
    % N6 l6 v: F) k  a4 f# _# and all empty directories above it/ w% v3 H0 r% P% b' z* f% ~

    8 i7 j- |, [! m6 Xos.removedirs("c:\\test\\multiple\\levels"), v) c! f# b, [6 `; U5 m
    . L4 T9 C7 a6 u- ^# n3 Q
       1 u2 _! {' Q$ V/ E* |3 n  g* ~

    . \- j# k# r8 P/ m2 R- mmkdir 和 rmdir只能处理单级目录操作.4 \, w$ w: s7 L2 k
    - a5 w2 v# }  e+ S8 j
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    # v' U9 K& f3 h( e
    # ~6 A1 ^6 ~8 P1 `9 H8 c0 f   
    ' I  Z& }; s# j9 X; D  Q2 _7 c& K% d( ]9 t
    3. 文件属性的操作' L0 ?; [8 G4 U* S" j7 V5 n8 t

    8 H* C' i6 j- l5 Oimport os
    - }" q& t2 W/ }+ w1 @) p
    : U* ^; L" z3 ]2 w9 b; ximport time
    & g; u+ V* S3 }! L2 N$ I  _1 }( K3 @
    file = 'c:\qtest\editor.pyc'
    9 f1 w' ~6 W; E( t2 y) o6 H1 V3 k3 b+ c) u8 G
       ) u: ?& A" f/ A  m$ }3 m

    2 [; J, w  e! E  fst = os.stat(file)- _& k0 y. {% j$ J, T; Y

    5 m7 f' v3 @+ nprint "state", file6 Z( I; I0 X- T0 w
    3 x1 C# P9 W( o/ z
       
    ' r; D  {9 A9 T* s4 W
    - u- ^6 }& l6 m. Ddef dump(st):& U6 m5 q3 L  ]& F' h8 T

    " f& K  w% m# K$ _5 F1 U4 `0 D9 r5 e! gmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st) ^* g& _$ T% E7 Y, ]' C
    ; N) q/ {. X5 a$ B6 r; l$ ^3 |
    print "- size:", size, "bytes"
    - n! f, \. e# r. v6 g/ s. y0 b& T; F9 A! U
    print "- owner:", uid, gid% V4 \4 ]; W2 Q+ F, \- v  e- p

    * e6 v: C, G* u& E3 I1 Dprint "- created:", time.ctime(ctime)  ], l: {+ q# p& M1 W: @0 G

    ! P3 I! r0 b3 `print "- last accessed:", time.ctime(atime)
    3 u' j6 ^7 T2 u. w( u8 y
    0 k  \; x6 Y' `" J0 k- g& yprint "- last modified:", time.ctime(mtime)  z! ~. j: _* |0 \5 N/ L- K

    ( _7 ?# W* ?) v) pprint "- mode:", oct(mode)
    : K. w. T: c8 b, F+ d$ ?1 R, W
    ' s4 y% V" S+ M: }; @2 U: W  cprint "- inode/dev:", ino, dev% |5 w6 f. M4 N" u( m$ Y

    # U# ^' Q8 \4 z9 A1 w% X# d6 T% B   
    : ~0 F7 y7 O% T- i- q# z2 {- N! P- m, Z
    5 q- `9 z* t  b) x% i/ pprint dir(st)
    9 R" }/ p' T3 G+ r9 f& \: T8 O; @3 X9 C3 w
    print        
    : y/ R& f3 U0 R: Y0 T, b9 E  x( o- _9 V/ F, a
    dump(st)$ u# Q# k( @! w* W" J
    $ m  T& @$ z0 y& P) T
    # print+ D7 ^6 p. ]5 r; s3 {

    4 F2 _3 Q* n; Z: m, c- c2 k   
      S, U9 k' e1 Z, P
    0 }; I* X2 f- Afp = open(file)0 B) }8 p( X( `, B( y
      U' E- F4 Q- h6 Z  s9 F7 [
    st = os.fstat(fp.fileno())
    : C" @. V0 f- K" Z9 K
    6 o6 m' L% Q- [6 y7 Fprint "fstat", file! R! Y: e& P& X
    1 F' _* @$ h9 a5 ]7 {4 Z( G$ k
    dump(st)
    & c5 ], p4 d' n( B. y
    - N' z( N: I: Y. v' j1 x   " h% f3 n3 D* k1 j4 E7 [8 E

      E* i" @! v+ jremark: 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):
    # {- S2 p3 S/ {2 U- }' b! `4 P' ]; U* ?; a
    os.fstat(path/file)+ d4 z2 `4 ]1 U- f

    8 V7 q3 D/ Q7 T, y' ~3 ^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 & M4 q. X3 L& ]
    可以放进文档当成附件下载的!

    + o$ w- C2 R, {# V0 ~6 T+ X很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-10 15:58 , Processed in 0.432548 second(s), 64 queries .

    回顶部