QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3796|回复: 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
    2 D2 I4 @5 G) ^

    0 r: r/ W2 J2 qos 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    - s; V, e' A) g0 p5 s
    ' D3 e5 D4 }: L: R% m. n" ^   
    5 R- @, j- ?3 `9 g, S& d' t- U( p) O* D3 y3 u
    1.文件操作' e( I7 p% o3 L& u
    6 V$ Z. ~8 m+ Y
    build-in函数 open 实现文件创建, 打开, 修改文件的操作' q! B$ |+ s1 `) P2 e* Q+ E
    " w/ [: A7 b/ b% P- J% B+ m
    ! q7 ]3 m. w- _% d( ]- X9 r+ S( X1 u% c

    % S- W0 t2 Y+ N1 Nimport os
    . h6 C. ~/ `' T' p* O3 v1 ^4 ^0 @% O- R
    import string
    $ v# O' m4 s0 S8 b8 h# R1 t2 i8 o$ R9 R0 @, {% f
       4 U4 ~+ |, [6 u. e) O/ A7 P
    / k. `) ?* s% l5 }6 w2 ]0 _
    def replace(file, search_for, replace_with):' R: f+ I0 H+ G! z3 A. E; [
    ; p( d7 V3 N9 U5 g; P
    # replace strings in a text file
    0 {) T* ~  k) p; y% v7 s& X8 ~" A4 [/ r4 ]$ \* g3 K* C* X4 L
       3 w0 _1 @; \6 Y5 ]. R) W# j& q. S
    9 P; D; J; F& c- W
    back = os.path.splitext(file)[0] + ".bak"- ?7 G1 G. C5 R8 Z1 K" X
    3 W/ P, E# I3 k; V8 E- u
    temp = os.path.splitext(file)[0] + ".tmp"
    7 N) f5 p' E$ U! U: b+ ]/ ]/ L0 `' O5 |- t
       9 q5 C& V2 Z8 i, M1 w4 }

    . |9 \5 Y2 z* dtry:8 `+ ?) D/ C7 T7 O
    " I5 N5 h( s: y0 X: |% A8 j" M
    # remove old temp file, if any
      E: S% ]- R* `7 A3 N1 f5 b6 |- z; z2 |1 T
    os.remove(temp)% p, Q: |% R! I0 x1 K. k4 x
    $ B7 F9 O. \* d% O% s5 w4 d9 K
    except os.error:0 Q7 [4 n5 Y. V' h# [- L- L
    2 }6 t  `' c' A2 E  x- l) F
    pass
    9 R' Q+ M; v0 k- v: _! {, _& N8 Z$ J- G$ ^+ C
       
    ) E/ U7 ]0 k4 U& O+ B9 u
    - C( L" C4 b/ Efi = open(file) #  F1 s2 q7 d# r+ C

      _: a! z3 ]& c9 v# ~+ Y" w( s1 mfo = open(temp, "w")        #
    5 ^, p, ?; {; k3 Y. I
    1 Q* W! S; T" _2 n* T. w( p- j   4 ?3 R  J. A, t9 j3 n" Z9 W

    ! ]0 K8 E; a% Ifor s in fi.readlines():% O0 f! U! J8 U5 w- ]# R! s
    - ~5 R" y7 n2 H# ]1 e' C
    fo.write(string.replace(s, search_for, replace_with))2 y# L: K' n6 B2 I/ Q8 l% l2 [

    $ O3 q% n2 J1 {: M4 b7 T. Q   
    $ a/ h( h1 E5 U3 e7 {+ S3 u' `  Z7 ]$ D
    fi.close()
    # h: P: D1 r7 B2 \
      |# o1 }2 c# l) J  c. Xfo.close()6 x. r( z) D) E  V8 ]
    ) V1 w" ~$ y+ t+ Z4 F# Z: n
       , i7 t! z1 l- u9 D; K* j
    + L9 Z1 v8 i- }0 U8 }
    try:6 {3 |' D: i8 W; r

    # ^# ^" o* L$ ~" D" x0 T# remove old backup file, if any, p! e. L* K6 c) p

    : `8 u$ P' U. Q9 \6 Jos.remove(back)
    4 F1 [; V' `1 `$ A- r, Q/ {& s# m/ U8 ~0 V
    except os.error:; V( E% P7 D2 T

    9 E# a) |$ M. R2 Kpass
    , q$ s+ P' |# K) b/ Z* }
    ( a% t1 \* t3 y/ T% G) o   
    $ }1 e* x6 K8 U- s8 B5 L  C) r& E( {6 u9 N
    # rename original to backup...2 M) V* u- p, A5 {9 q7 Y
    $ ^) A- [1 n5 Y; w3 {1 J* |
    os.rename(file, back)2 x6 Z) `8 A* ]* O2 L$ P5 g

    1 B7 G0 K0 \( F4 V   
    ( B$ k  ]3 `8 N- ~- C  O$ L9 h/ t  E/ ?0 v0 x. l2 M1 T
    # ...and temporary to original, R! r! j* N$ z
    5 `) \; h8 u- Z" i- F" A. L
    os.rename(temp, file)) p  z+ k7 p, ?
    * A( o$ d2 N0 `
       / g7 ?2 \$ x% |- d/ s6 f- k8 o
    ' g6 v7 n1 u" Z6 E. U8 `
    # try it out!6 J# ~% {" s$ G# P3 a7 Z
    ! }6 ]# h1 m* @- t% {% x
       
    - ~2 B/ R, C/ \  E
    : l( {1 g2 q0 [& dfile = "c:\samples\sample.txt"8 L+ Q& A- i3 ]0 b: P2 A

    : b0 j+ a2 t; K& h4 H1 o+ S$ h   5 N1 g) S, J4 x+ J

    $ G# z4 ~$ k3 Breplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    1 o4 T) d5 T+ w7 g
    7 f2 D7 b/ `1 u1 Greplace(file, "tjena", "hello")& h* M% C1 |) g! Z. J* O

    ! O$ m& B+ A% z2 b   . d! H3 R4 ~4 l: b$ K# M& m
    + V" H: x3 E: L- r0 r% }# ?
    2. 目录操作
    ; T- t' R& Y* b0 u2 ]
    " a2 {, _( ?9 Y% x5 \9 K, Ros 模块包含了许多对目录操作的函数
    ; B" Z0 A- L9 T; k' x6 r
    # y! m5 S) K8 `  U5 J- ilistdir 函数返回给定目录下的所有文件(包括目录)
    1 x: V% Z# u9 ?
    * s' b8 [# N0 F/ z: n   
    8 c! [5 x/ m" b3 ^0 s" q' U
    # [$ K; V! r; ~) G, k4 d7 ximport os
    # e/ r+ Q/ c( \8 i3 J+ e9 w0 v2 ~, c8 Z  m; ~: E; j0 |- t
    for file in os.listdir("c:\qtest"):
    ) n0 O1 \. c2 m) W
    ) U5 O* ?* F7 W- f+ }print file
      M- G0 a# @$ j; X
    4 O7 f) O2 u0 A4 v( s1 [/ f   
    / Y  r' O5 p  x6 G: m, `' ^. R
    getdir 获取当前目录- Z2 x( {, M5 S

    * Z# I+ a. i# F. h/ x! cchdir 改变当前路径
    7 l/ C5 s$ M6 ^3 V; _, M+ A! t2 |  C7 H, y
       ' c; R/ J$ i8 d$ T2 |
    5 ^9 ^& }) {- e7 J, e! a+ V) ?
    cwd = os.getcwd()5 }/ _+ S( f- }+ I  R5 Z

    0 t+ ~& e3 f0 r6 M  S8 Pprint "1", cwd+ d, R7 P: M& [5 L/ W( i% b

    5 j7 X0 e% K: |  l$ V+ _$ j0 ~# go down
    3 T  K% K# E) w* ^3 `
    ; \9 S2 d! \* l3 O. m: Tos.chdir("c:\qtest")
    / \, }  }0 J- r+ d  s! |; J4 [$ C* H/ A; M3 J8 `: l, ]6 t
    print "2", os.getcwd()
    & a& h; D) r2 K. j& z. T/ L  v- ?& j5 b0 Q
    # go back up2 S. l6 C) `0 ?- H2 V# J
    5 p, c! C0 C) C& C+ t, {+ P7 r5 [
    os.chdir(os.pardir)#返回当前目录的父目录0 v& B; v, n3 |

    6 d/ J" f# z  p- h# u/ ~: `6 Iprint "3", os.getcwd()% a! V8 n% s# Z( i4 j

    , ^/ r( \4 Y- X' t2 F. Y9 G3 [2 z' x) y   7 w% ^5 e/ |$ A

    - C; X; y/ X2 j" Wmakedirs removedirs 生成和删除目录4 K  b) s5 e6 e; S4 [
    ! T% r* ~0 ?2 ^7 L
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    / t  y3 I9 U) R' @4 X4 {8 \
    ! X1 D4 G* ], C6 J, C( L- d) q   
    " Y7 b. c) i  o1 u8 ~. l( I  `6 r1 X' \& G: h$ \; o
    import os
    1 G. j6 x7 J# U3 b4 O7 `
    / I9 W7 G' n8 s  }os.makedirs("c:\\test\\multiple\\levels")
    5 O- j! k6 H! f1 K
    0 Y( @+ z' x* r$ Qfp = open("c:\\test\\multiple\\levels\\file.txt", "w")# O& c  R# b7 `; I+ ]6 g  i  [7 [

    0 u' k* z; V; h3 |fp.write("inspector praline")6 i4 Q$ v9 @1 o1 k

    5 w, Y: [9 V( r8 s+ I# ~fp.close()3 V+ D9 Y  W1 C
    7 h8 O3 p, g+ D( f, e2 t
    # remove the file
    ) t- y# d* ]' r2 R. U! {
    " D* @- }1 s! t" Y" ]5 Ios.remove("c:\\test\\multiple\\levels\\file.txt")
    1 ^$ \+ i# D0 p. `
    0 M) k$ V, O6 l, s3 @" m# ]& I# and all empty directories above it7 J4 P) d1 X) b1 `& V6 V$ w7 `
    ! Z+ L& v4 M! W) X9 _6 H
    os.removedirs("c:\\test\\multiple\\levels")
    & m! ~1 B4 A, r5 P/ X6 M) b
    / y' N& V" U: G! ]6 n8 Y   9 a) t% C8 i5 E8 V' N) L8 H3 c6 Q! W
    1 ^% O- g6 W; P, i9 R7 g
    mkdir 和 rmdir只能处理单级目录操作.7 e) c. k& `' ^/ g
    9 v& M- q! S- [" p/ Y* B3 x+ q" |
    若要删除非空目录, 可使用 shutil模块中的rmtree函数
    0 ~- y: u9 x% y' S# X/ n+ h8 C8 ?) z/ H1 u/ U; U" J
       
    ; h! U2 E+ a8 u  ^$ G% t/ K2 I% Y0 d) |6 l% m% ?; x# A
    3. 文件属性的操作: Q! O" r8 r: y9 O. S
    3 w8 x2 i. ?. h6 S  X7 r
    import os& R6 Z/ P' q% ]4 K" J

    & V5 |" ~, z1 r+ b7 eimport time
    ) y3 h$ Y/ t( E% n
    - x- ?! s. y# A' G) z5 Jfile = 'c:\qtest\editor.pyc'" T* B# I* f! w+ r" Q- I
    2 A+ W2 ^6 p) F' U/ J$ s/ Z5 z
       & r) G% s! L+ B5 J/ I# _! M

    , a( C' Q' R7 O& C) W$ a% Ast = os.stat(file)
    ! C: r8 }3 k9 M# t3 |, }. W
    ) Q3 m2 ]5 M5 I$ E" P. M, \print "state", file8 F2 B* q5 o! L5 q& Z1 z

    $ l  y3 v' C% ^" Q+ M1 @% p8 p   0 |+ \% o2 N6 I
    ; N" n' V; y' f6 z6 l
    def dump(st):2 [4 {& d. Q2 P$ C0 j7 v" D0 `4 N" J  }
    % G# t8 Q% ]  n4 c2 s
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    # @8 \) S9 n0 N6 y, E( `4 B- l+ J# [6 e$ W$ |+ L
    print "- size:", size, "bytes"+ m( V* w3 u, i+ U
    ! d9 y  A  {4 A8 J) r
    print "- owner:", uid, gid; T% ^) g+ l- o6 n
    6 v# `' F6 W1 Y3 {: F
    print "- created:", time.ctime(ctime)
    9 Z+ j# b+ r. B
    ! v; K. G4 l5 w' O! Z0 ?" q* ]: Yprint "- last accessed:", time.ctime(atime)
    0 C+ r! M9 h% ]! W7 o0 B1 v
    . M3 f& O% e# ~; tprint "- last modified:", time.ctime(mtime)
    3 C2 C+ _9 t7 F6 y' e% D5 ~4 l" K( x
    print "- mode:", oct(mode)) g. r5 A+ X4 s4 \: {8 H, U
    ' y) w3 b2 G4 T, a* D% w) \/ N; _
    print "- inode/dev:", ino, dev& v* V$ |8 _# S" h9 b; n6 a/ K8 w

    0 v4 [$ `  S3 t8 D9 `8 A   & D) O+ w( r. t' `* X: q

    , g2 P& m+ t( j7 d% Kprint dir(st)
    % e: k! x' }8 B. S! ~/ s. l- b7 W  P+ l8 N3 j4 a& A
    print        
    , S2 |- ?- ?3 u, Q+ z! [
    2 j/ x, C. \; adump(st)
    6 [4 x1 f. i/ \! Y
    4 v2 G1 F5 k1 W2 |# print
    ( m4 |/ q3 w$ C. p4 o! I) T& l* p3 k0 W
       5 D, s- w' e; O" v; @  @
    1 t, |% c' G6 M
    fp = open(file)
    - m% c7 ?% R0 k/ F4 L# Q4 N8 t/ Z) |
    st = os.fstat(fp.fileno())
    . a' a3 K- A8 g  E  \" n5 S$ z- \) f' A3 U
    print "fstat", file
    " c6 M5 D# R, v4 s, u' T# @3 o* ]. W
    dump(st)5 V. M  h" U4 u6 ~

    ; _' A+ }2 T7 {4 n  T   
    / m: i$ C# V: Q5 J3 R4 S  t: f7 p- x8 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):
    0 R2 W) [, q3 m7 h, O6 `9 T- j5 a8 e. Z' d4 \8 ~1 o5 g& h2 ]3 `
    os.fstat(path/file)
    : N; Z, G) x) r% x5 _, c/ H( ]7 G6 \- U6 D; ]5 u* ]
    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
    " |  K$ T0 B8 b" s1 N可以放进文档当成附件下载的!
    7 E3 N* Z7 c6 F( n2 f+ R' x
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-4-12 03:24 , Processed in 0.375514 second(s), 63 queries .

    回顶部