QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3839|回复: 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 s7 b* h7 i/ N) d& I" o3 N' t/ ]2 F8 {& m/ ]1 |! ^
    os 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作
    $ {5 W& w! [' V- K+ g" ~
    % ]  @( X1 e* X! n3 k, W/ K+ S   
    3 H/ \0 o' N- J7 g' Y' ~( V8 @# h2 _( @. T  t" @3 k. D) w
    1.文件操作
    & P2 u1 L! }# `$ V2 {1 }: U. y; l# G  N0 x
    build-in函数 open 实现文件创建, 打开, 修改文件的操作1 A0 W4 i, s9 e  \$ V) g
    # }$ ^9 w* U7 \3 `$ V
    " l8 R! Z/ P- i

    # M# }) h1 `2 y7 T' Timport os2 |2 H. i  Q. m2 A
    , e, L3 M/ F6 I" o# z( I
    import string
    ' V" _( p2 k! b4 @: s
    4 _5 t) N2 F% ^. Q- N- p   
      K1 s  Q3 W( w# k( C5 F0 U1 x
    1 {! c1 @; Q; }# E. G7 z8 `! tdef replace(file, search_for, replace_with):9 a0 B( a' C1 u; d1 M

    # Z! L; z8 F+ ]/ |7 J# replace strings in a text file1 @3 k! j) Y3 Y, ~
    9 Z% S: {, z+ X8 z/ u
       
    6 \, ]& {6 X$ W0 U/ D! `, u
    6 t3 w0 Z, K) ~% d# o" k5 eback = os.path.splitext(file)[0] + ".bak"2 F' X% W+ U3 G& J3 J3 O& [) W
    8 A: T$ O4 V8 n6 D, m9 A
    temp = os.path.splitext(file)[0] + ".tmp"0 H& q6 N- X" g

    5 H1 m. p1 P5 u0 v8 {& O  _& d! r+ d* q   
    / i2 O6 |, Z3 M/ k. R
    : y8 M) \/ C! l9 j( b# @+ Ntry:
    ) G# P$ G7 ^1 M# G% X
    8 T7 n! B: D9 M( G( k# remove old temp file, if any" _# A9 C0 `  k4 Q2 F

    ! _  B* i) a( N- i. nos.remove(temp)
    ! F. |- M8 c$ B* N
    ( a0 c5 }! J- h' f; d6 iexcept os.error:
    % x. l  t/ ]4 V  L4 ]5 e1 g' F( ~" `* r' \
    pass- I: J* L! |* q

    5 V3 J7 _3 c* Q* N+ g* c   
    ) l( `0 p! G) Y& i4 P
    # b( e' C, @. lfi = open(file) #
    % m' R9 S' `: H! E8 H# @( P: }5 E! _2 c8 v7 {2 A0 ]5 Q8 \6 g
    fo = open(temp, "w")        #
    1 O' W$ [" n' S4 [5 I# x- P
      F1 M+ F+ O/ w: }: Z0 a# w: f   8 @8 k* e+ z: }$ W+ f: Y
    & |) B) @0 ]  B3 q
    for s in fi.readlines():; j2 \% F; a2 I9 Y" K

    ; p3 ]' h5 D2 P  Zfo.write(string.replace(s, search_for, replace_with))
    6 ]4 k/ X# X! }' [
    3 F3 Q5 T3 b1 |, a   9 d% E% F+ R( n$ _" x, _8 H1 O; }$ }( H
    / s4 p5 u; ~  T& T- w
    fi.close()) v1 p8 @6 K2 m
    " w* ?" y8 H0 [3 f2 ]/ a- b
    fo.close(). P0 w0 E& b6 U
    8 @$ C; X7 D5 V  R- d2 U! n
       
    : s0 J  O3 {: n4 s$ v  ?- |$ [1 I! s6 M% V3 o8 |  t
    try:
    * l! {/ W+ z) t( E3 I1 W8 }9 p
    + C) j+ }% N8 x# remove old backup file, if any
    8 E2 K1 N& I  W* Y- H: D, F9 ?! o3 S6 j# @* ~) A, j, ?
    os.remove(back)" f- }2 B* ?8 [. ]& X
      D' G" R+ v" x0 g( p
    except os.error:) I0 i0 s8 B0 t  G. X
    ) W2 n  V: g$ V: K7 L' B9 |
    pass
    # G2 E" E) @+ g4 C" G% S/ S
    $ }# k- f, T& \2 q   
    $ Q" C$ p7 W2 I' E# H( i+ Z
    : Y+ B1 o: @+ D- p, Q' R; I# rename original to backup...: u" H  W' @6 @$ }& i: \
    6 L2 V) J; E& b3 X
    os.rename(file, back)
    + l& |5 |, @+ z) B1 G  p/ D9 S; N' d& q: w: }5 O/ j
       
    " p/ X9 z9 p% x! W; Y3 A1 C1 Q( v" A7 |1 i
    # ...and temporary to original
    ; ]5 S% g/ {; y* q+ S
    6 L7 Z, {$ F% ?' M' aos.rename(temp, file)" F* M# O) w. ^$ O6 y. F9 ~

    0 }$ d& r2 h# }0 l# t4 h3 Q& ~   , R8 o" h: _7 w; e

    - L- q: F% |6 z: g0 A7 A) o8 c- Q# try it out!
    ; r: @- h# Z0 c$ F0 }& M5 P/ e% R3 g& B/ A7 r
       1 M5 U- K2 f) F8 G7 P- u9 Y
    6 O' r4 N4 j, O( x2 h. r4 |! u
    file = "c:\samples\sample.txt", Y4 G8 {1 r. }- B5 g" E5 {
    : L# Z5 l! ^8 @4 \3 |+ M$ |9 g
       # H- x+ o+ q0 }# t! t0 l
    * W! t) e4 ^! b* `: E4 s4 C! w# B
    replace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena4 t# f0 P0 A4 s  T3 z
    / C: C  T4 A- U2 y
    replace(file, "tjena", "hello")
    : K0 O$ N2 E$ ?+ }
    , J1 Q7 }& b  u3 h   
    1 V; t  g4 U+ z
    5 Z: H+ o' w7 E' b2. 目录操作
    5 M. d6 x. D4 B, a
    - w  A, L) \- g+ H$ Nos 模块包含了许多对目录操作的函数
    # l" _3 X( ?0 l+ [% V
    / i# Q. y7 T( G/ S; _4 W; qlistdir 函数返回给定目录下的所有文件(包括目录)
    2 ]3 P* x( d5 p8 H0 A7 r* s
    5 j: e" e; M7 s* j# N9 v9 U   . k9 H& P  i' n9 @5 U% U

    : i! i  s6 a* F# j5 l& uimport os3 X8 y, H8 q7 A( r6 i! Q$ H
    9 f: i6 t9 n0 x6 k
    for file in os.listdir("c:\qtest"):
    7 Y3 @5 v% a: `  ?0 D: l# Q* m, \
    ! j4 ]% [6 ~" T1 ]' [print file
    1 S- w5 L, g% U# q: |( q6 q, w+ M5 |* ]
       0 X5 q, U6 D; \% x7 q4 d4 i

    % _. m' Y' M4 \0 p. Cgetdir 获取当前目录3 U& V" B8 ~6 C% y
    9 `3 B) ]# p* u$ }. k1 Q
    chdir 改变当前路径
    + w9 B3 A6 R. K8 m# h% p1 \) N" {" a" m! Z9 @0 c' U& Y
       2 J7 S; Z1 \& h. e+ h. k

    ! `* }* j& ]. xcwd = os.getcwd()
      u+ h$ ?% z9 \5 [. K4 V- S
    , d4 R! ?3 i6 ^9 y# Y, ~2 z3 v* K4 mprint "1", cwd1 G, Y* z2 O( w" N% h$ Z# k5 E7 \, D

      V5 I; Z  h% E8 n* ?4 t  |# go down) [. m# B1 ]( B

    3 i; Y* k4 q; U: k5 s: g" p8 m1 `os.chdir("c:\qtest")
    ! W  u4 u1 F8 C- o% u' Q$ }! E, {& N# I
    print "2", os.getcwd()
    , m) X. v; W4 r0 r
    5 @- Q- I- ~2 d' t- j: h# go back up) t4 b( _8 z8 }2 I

    ; `" U+ G7 k# }$ k9 q% bos.chdir(os.pardir)#返回当前目录的父目录# ^8 g5 t* A4 u% C" }0 Z

    ! y0 m; s. T: [0 zprint "3", os.getcwd()
    8 T0 M1 `# M5 j7 l+ y) a2 @3 ?4 K5 p. S. _
       
    - y% l, k" ~$ R1 T* c1 M0 B5 ^' Z2 K# }' v' i" A8 u1 T
    makedirs removedirs 生成和删除目录& @" i+ H1 H% V6 F
    . |0 ]" y. d: C8 z* J
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除4 s; `  ~! b' o( f

    ) i2 u6 c0 [% Y' v) f, Q7 [9 i  D   
    6 k5 V0 B" j, w& L7 z5 w( |" ~5 c8 b* x2 @' G7 C8 L$ K+ ~+ \
    import os* v+ Y* C4 M! L7 K- c/ k) A. l

    0 \0 J1 p  s' ^6 g# |os.makedirs("c:\\test\\multiple\\levels"). I2 ^* |' x* P2 z8 Y
    ; \5 c3 X5 P0 h
    fp = open("c:\\test\\multiple\\levels\\file.txt", "w")' W+ ^0 e4 _* J0 F4 o* S. D# E
    . U9 `4 |. n; ~
    fp.write("inspector praline")
    1 ?6 [3 p! ^7 P% d
    ! v; {1 M6 }4 Vfp.close()
    ' c4 K" y# G1 ?2 G0 `0 X% P' a" A  C) E6 p6 x  V
    # remove the file% O4 X3 Y1 Y  ~, h( R& N6 P- u
    ! a# }3 S3 z6 K
    os.remove("c:\\test\\multiple\\levels\\file.txt")* t1 O% q* U( R4 l! k  ~
    - i6 c  N4 U. D" ~! \
    # and all empty directories above it
    3 f: R2 g# p8 |: b/ s; y4 |' W7 t) D5 c  p9 \7 ^% w9 f7 ^
    os.removedirs("c:\\test\\multiple\\levels")5 S1 l  z- }( t4 B) d/ _1 w

    $ A5 G2 G$ m2 U4 v# r% {   
    3 p4 ?) s8 |% s5 s5 A' o( ?; s1 k4 B  w- @# ^
    mkdir 和 rmdir只能处理单级目录操作.
    5 G& s- m* ~/ n' Q, c& W/ D1 m. w  D8 c
    若要删除非空目录, 可使用 shutil模块中的rmtree函数8 p0 y3 X% @! M  U* m% Q

    0 x; r! P& M/ Q4 \, |   ) Z% r+ O3 O0 I; h- x8 T

    " T+ r+ }4 h8 p/ x5 \+ J3 v3. 文件属性的操作5 i8 Y- f9 K' W# U
    * ~5 F1 u9 ?4 d* o- J
    import os
    / E( b5 K! P2 Y7 O# y  s8 `0 [5 q6 d' M7 o' T
    import time
    : Z6 W5 D3 ]6 {: T) @8 X7 k; F0 P9 U& L7 W
    file = 'c:\qtest\editor.pyc'
    . X. s4 O  `  ?2 P/ M. g7 d
    . B2 p1 f& k8 T, s4 `- G* U   
    4 m$ x0 r( x  v" M/ J( H  r
    2 p6 M  }$ u( l& m1 ~st = os.stat(file)
    " S. p( b$ m4 l/ ?$ o) L2 Z6 @5 g! c9 V3 B' ]1 C; A  T; V1 y6 D
    print "state", file/ j+ z$ _" z! A& t' Y- H. A
    # G% g0 ]4 @! p" T) n& W
       
    + H( r, ]4 k# x& {% O0 ?
    : a2 d+ {7 l4 p( `) Q5 A/ a0 Qdef dump(st):2 ?* J9 M) d. M0 i$ k1 {( X
    / h' V1 P" c0 M& P  x
    mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    8 t. i2 ^1 w. [' i" U1 E% r4 c$ x" ^, ?7 R0 o9 j+ s
    print "- size:", size, "bytes"; D& ]' z, @! i" A

    - h- C6 L. i0 S- c% W% h) {print "- owner:", uid, gid' Z# h- C+ Z  S1 R" P$ x
    2 a6 a: W. }7 ]# w; S' U5 v
    print "- created:", time.ctime(ctime)
    # h- p( g- G% M/ r
    , |5 w8 h, X' q2 G' sprint "- last accessed:", time.ctime(atime)$ h8 k  J# A1 ^% A6 F1 p- ~
    , H- w3 M1 E$ D3 y7 h; G  J$ @
    print "- last modified:", time.ctime(mtime)
    2 G1 K! F  ~1 ~. c" h, D0 \! M3 J) f: V
    print "- mode:", oct(mode)! a0 _# R7 G0 I. D% u8 O
      O4 ~/ q' ]- |* P
    print "- inode/dev:", ino, dev$ r$ p6 J7 G1 e8 R9 R: |' p
    + [- z6 I! s) F) o
       : k! d0 f% H  N4 }0 m1 l

    # M" M# N3 b  h# l/ g, Zprint dir(st)
    ! ^; ]8 w5 o# p2 i6 b  a/ _8 `6 O5 f7 V7 o9 B
    print        
    ! k7 L0 w& t; M! U: w- U. M9 z6 }2 a6 O! {. Y+ t: B
    dump(st)" X( Q6 k2 g  [
    ! k& Y* Z( f- A1 A, s
    # print  r: t6 Q3 c5 R9 G+ [2 v

    + q( r9 E. o$ Y$ D3 s# `1 x   7 r/ {( F# O, K7 L9 [+ _

    # O4 I9 N7 L1 X. [) mfp = open(file)# Y/ f7 B+ q7 |" u
    " Y; @- J; f) D; P) t
    st = os.fstat(fp.fileno())4 b+ H% R( A( z' R6 r

    2 P+ b2 g  [" l3 o/ N" k4 A2 Kprint "fstat", file
    ; f, M+ [! b. @( l8 K# e. Y( {. w, j4 ?7 j
    dump(st)
    + f0 g+ Q% b# q: c1 s0 E
    ; X9 x7 t# D0 P+ ?; I0 ?% z1 A   
    ) S, q0 @" k& U; p7 P
    8 v1 u1 r9 K7 W; S/ z& fremark: 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):% |7 P& b7 q1 g

    : P2 j4 x2 r: T" b9 m1 Z$ A) bos.fstat(path/file)6 `) j6 ~' a8 N: [
    / |. ]. P% e- N- j5 W
    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 2 k1 `+ z% Y3 S0 h" k
    可以放进文档当成附件下载的!
    & z5 J% ^4 C$ L+ D4 p, I, S
    很好的建议哈
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-5-29 06:54 , Processed in 0.458214 second(s), 67 queries .

    回顶部