QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 3855|回复: 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
    9 `( f( t( j! \* z* N$ R8 P0 _

    7 h- m; p2 t) I5 Z8 ^! K  los 模块提供了一个统一的操作系统接口函数, 这些接口函数通常是平台指定的,os 模块能在不同操作系统平台如 nt 或 posix中的特定函数间自动切换,从而能实现跨平台操作/ l2 U3 O( W0 s; E0 ?

    6 I2 f3 l( e( V% Z   # i$ p2 c! A, n& ^* c( O' b- F
    " [% k! [7 k* w4 U. ]
    1.文件操作3 J' C9 I; B# H$ K+ B5 s' q% j

    & i. c$ g' F4 W* d) z1 G4 Sbuild-in函数 open 实现文件创建, 打开, 修改文件的操作5 f8 ^: i! N' H; g3 N

    ' _) I; A$ N7 P 1 P5 T+ u! v' I) ^' K& W! J

    & \; I7 K9 `- v# F; uimport os: Z& u; F  s7 S' q  i; W
    # l" A  f/ @7 s( O- p
    import string
    # z! [5 n9 c/ w  t) f+ v, I
    4 T3 Z, ~  \" u2 @   ! D/ O1 C8 J# j4 `1 t- _  R! s9 s

    7 R- G- a: l" Ldef replace(file, search_for, replace_with):6 L' w0 `2 a3 F  O3 U

    * Q3 B2 G8 b% a6 M4 N: w7 P# replace strings in a text file
    6 |( |0 L5 B8 O. I8 y2 S5 p9 E
    1 h- N! y1 E1 }! l6 |/ q& S" Z   
    . K' {- a6 V! [3 F* a2 F- e( J  l1 [6 X) [7 ?' [
    back = os.path.splitext(file)[0] + ".bak"( @0 X2 \- b1 ^( i

    5 k2 [; n' @( t: c3 gtemp = os.path.splitext(file)[0] + ".tmp"
    0 P1 N/ E- V9 N+ q
    $ O; X" K5 T( y6 o8 _! S/ i0 X   
    + J4 X+ K( f+ @. E
    4 t* Y2 i8 Y$ ~+ |7 I1 A, ]try:
    , `- E5 D5 [) f( C9 L4 p+ I' n* P: f; n) ^  B% O; j6 }; w4 o
    # remove old temp file, if any
    1 c5 I3 D# x( |) n) h- V- ?: ^- h! L* g2 [- z) @
    os.remove(temp)  i; {- U# L9 y" q+ |  z
    5 z( M7 M* K0 `
    except os.error:
    8 K$ x, h( @! h9 R. I
    : ?$ y3 U0 J  kpass
    6 A; {+ q% V( v0 x  r. l
    * I# k- M4 X) \8 q1 e9 B# H   
    $ D+ L7 w  d- w6 S% S% G4 _" u+ N
    0 A# n5 w1 Y- cfi = open(file) ## F5 W+ w, T+ ~& Q
    $ [: [& C5 f; \7 k3 E
    fo = open(temp, "w")        #* j# z- F1 c6 N3 [% p

    8 D; X' c( @3 {& p6 e5 }! J   8 Q- x1 P" h, c0 T4 ^# O
    : @6 n9 ^; c! v: Z' h$ q: P
    for s in fi.readlines():: `$ c2 Y8 r/ |+ I

    & ^8 G8 y, j8 L9 ~* hfo.write(string.replace(s, search_for, replace_with))
    4 `) }5 j# e4 W' I3 l* g% A7 ]
      z( |& j1 X2 Z0 y) D9 I     W& b8 Z) M' d( G; M, S  V
    + s$ b0 }1 x5 l0 u9 J  Q
    fi.close()
    % i7 p9 z* {7 Z1 t& E8 D: k* ]* R- Y+ E: e+ h* L% b
    fo.close()
    # [4 l5 Y5 a1 t  V- o& d
    4 N2 ^6 @5 Z( `) o; f( H& C+ p   
    , D9 X9 `$ U3 h, J! }+ ?
    7 U! A8 ?1 ?  Y2 D9 R8 N$ Vtry:7 J3 h! k* g5 O  _4 i

    : Y: {, E% U- C5 L# remove old backup file, if any2 r: ~6 I! s7 \: P2 k- y8 C  W* I

    ; h/ e* ?- Y$ A$ ^( a% D1 K* ?* u6 Yos.remove(back)
    1 V& {/ _/ ~( T) F9 U* n/ D& @4 C# d) \+ Y
    except os.error:
    7 B8 A+ ]0 ]; d  |  w( z8 k% Z3 d5 @9 `4 t( j
    pass8 Y: U* C) {6 x+ [1 o0 B5 O
    ( L, s9 b- ]2 I1 [
       
    ! \8 H" j2 o, t9 E
    8 D$ S, r+ A0 {6 Y+ I- b0 ^# v& z# rename original to backup...6 K# T9 H1 s% W7 D' E

    7 \& O( w' x* B9 q) @os.rename(file, back)" u' m* {+ S& [6 [

    5 O8 q* T0 M4 _: R! h" v5 {   5 u. C3 `, F0 q+ i( J3 N

    5 G- J0 W' }' g6 P$ ?/ X# ...and temporary to original
    ; J6 N! [- F( Z* Q
    0 m) e" q0 X( r! r# X) Hos.rename(temp, file)/ U5 ^6 T. g: F+ Z

    - m. p( m# Z( q) W& Z  e5 s  J   , J6 r" U" F! o# K. G- `- p
    7 V: @. D  D+ w2 S
    # try it out!
    0 n. m) k5 v  S4 U$ {7 ?
    & g2 p% P' @% ]   - |2 X( b$ L5 S/ k; W
    ! V7 T. ?: G3 I0 ]4 b% m/ q
    file = "c:\samples\sample.txt"
    ( S9 P7 ^6 H5 R% e  [  A8 w0 u4 g" Y1 O+ }# r$ M7 \
       
    % I  J  F4 B4 E3 S$ g4 N
    % K/ q! i& @1 j" m7 r: P+ j5 u3 kreplace(file, "hello", "tjena")# search for the string 'hello' and replace with 'tjena
    ( z6 o& B7 y6 ?0 L. U
    % e5 |  ~7 ~4 [% dreplace(file, "tjena", "hello"): m) a* I1 J# n0 }& i* N
    % b. `3 n  P; m8 @, g8 N
       / `1 {/ d2 ~! u, S

    $ `7 i  u2 `$ Q: A- ~3 ^2. 目录操作3 ]& e# r  x5 h

    % Z9 t7 g1 a# X( Pos 模块包含了许多对目录操作的函数+ a* l4 x0 ?: p  M- H
    ! v7 ?0 H0 X# B
    listdir 函数返回给定目录下的所有文件(包括目录)& A. Z, u' g4 B3 S
    4 U3 r" f. F8 y2 T
       ( U6 ]9 `6 z; l  E1 r+ a

    * [# V  o$ f+ g- ]( S1 M8 bimport os/ F3 U3 \1 V$ u, h* g3 A1 [
    # L& L% y3 t8 T
    for file in os.listdir("c:\qtest"):: I& P, c1 z. f" b

    6 m9 J! a" D9 Y! l: {print file
    4 s4 R) y/ K2 `! M1 j  x
    & y( R* I0 \( J  q8 t   
    : r& d: A' q1 C& j8 e% v1 ?$ \& }  f) k
      w5 x% w& t& R, [5 qgetdir 获取当前目录
    9 u3 O5 B. I5 ~; C% L3 e! ^! T3 P0 e1 X
    chdir 改变当前路径. x, N: A" H& V# ?6 `, F

    ; y1 X" X! n- z- V, _  u   
    / E" \+ n4 i! H" l: B$ J6 [# y
    cwd = os.getcwd()0 `$ l9 ^$ h% f  C$ i$ G; x8 [

    $ J% ~( _; w) D; H  k6 ~9 q; hprint "1", cwd
    ( Q  U1 y) o% u+ H
    % ?5 I% `: N' W% J# go down5 t! d4 N0 k( ?8 |6 ?2 [0 Q
    - T% v* b# \+ ~2 f" c+ p' B
    os.chdir("c:\qtest")
    3 J" c+ b- [9 k( p" N9 O) }! ]0 p: \% A& D. W' d
    print "2", os.getcwd()
    : c( b1 G, h) ]+ U4 O: p6 [1 }, c
    ( p+ B1 ?( O4 r4 h: p! G4 g# go back up
    9 M" P: ~$ E% O. [  |& i  N1 {1 t7 @
    os.chdir(os.pardir)#返回当前目录的父目录/ K& f6 M, E+ H
    ; m: [9 L; n* I, k; z% \) }  `! K
    print "3", os.getcwd()* V! ]/ c8 v! m

    ' A- w6 R) A" T; N   
    3 x4 F7 T/ ~. y$ J+ W8 o# z% x! b! x, o6 s; C  m
    makedirs removedirs 生成和删除目录
    $ P, `$ h7 U% C& L& m5 M1 H9 ~! w! w1 ^9 ^0 o* ]8 q
    makedirs可以生成多层递归目录, removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
    $ b" c! A5 g# f- X, n3 d- ]' a2 ?) v; Q* i4 b2 L; g# J
       
    $ i8 q. h& m7 F# Y( c. P5 t* d
    . c1 G( L2 Z1 ]2 ^; S9 Aimport os
    , y# l3 y. z7 d3 v: J
    ' Z; [: V. d2 q8 Dos.makedirs("c:\\test\\multiple\\levels")
    5 t" W  n; o1 u% D9 e9 o: G# _
    4 U8 p9 t/ j. v" B7 `fp = open("c:\\test\\multiple\\levels\\file.txt", "w")
    : Y0 B0 K5 o  X8 R. ]; v& V: R+ g. ~8 k8 s
    fp.write("inspector praline")
    % D7 T% U& `* i' _8 ]+ T( V6 {" \' V% \$ A; ]! j" J
    fp.close()
    ' w3 w. `% K( C" \" ^& n% w) t/ [6 p9 D2 u% E5 N3 d7 k( l. o) F( k
    # remove the file
    % g4 g' b# w9 q# U! o4 p8 o3 z  U
    os.remove("c:\\test\\multiple\\levels\\file.txt")
    , H: S; t3 x9 o# ?5 ~
    0 G2 e0 w$ o5 j4 b# and all empty directories above it
    0 E' t- Q- h& Y/ ~8 G( G1 ~6 {; y& d/ G
    os.removedirs("c:\\test\\multiple\\levels")
    + ~, g/ Z7 L" A% L1 e
    + m9 ]+ c, ~# U) ~' G" J   
    ( ^' p% N& X, f( l# h& ^) x: r! R* R9 y
    mkdir 和 rmdir只能处理单级目录操作.5 r* j: p; v0 d' a7 K: Z

    # @# a2 ]0 k& L) J# \" M* p若要删除非空目录, 可使用 shutil模块中的rmtree函数' P, d9 |+ d4 V# W/ Q
    % k7 c- @# \0 U: G! g
       
    , r- z# L2 G3 I  W1 q
    # S5 ~2 j) Y" N, P2 Q& {# m0 F& Z3. 文件属性的操作
    . t: N: u% Y* ]& u) D( S! r( q9 k6 u/ ]2 }9 Y5 A6 q2 Z: [; U
    import os' ?% K$ w; g5 [. [# n
    ! ~, X6 m# b* T* p
    import time7 B# }2 E, B% \1 @3 \% d: o
    * {" W) [$ e( k. h- N- R& E' m. ~
    file = 'c:\qtest\editor.pyc'; t; j4 I6 F/ d7 D- o

    ; g" {8 ^8 D& v1 ?   9 J4 y( s% |- [( A' p5 x7 A* _
    / i4 _: v/ g! B( Z+ n
    st = os.stat(file)
    . {( Q: R8 t5 I5 t. w/ S7 A4 N0 y* c7 L7 N3 W- T$ B
    print "state", file/ k" b; N9 O: t& Z
    : y, i( ]4 \2 \' o% s* U* c9 ^
       2 `" I4 i6 L( g9 s# A& l$ M: x4 ~
    9 Q& q6 V0 Z( p
    def dump(st):5 v+ i$ Q7 R" K

    ( G9 O" N. |0 L$ s' B! U; O5 rmode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime = st
    * U5 _7 ~5 @  P& E4 ?: `. G
    ; m/ v8 ^$ ]; P: Z' r( j# N. Pprint "- size:", size, "bytes"
    + n7 o) c, r. `4 e
    3 f5 o( e+ m$ n0 Q! I& Y3 A4 w. p, Lprint "- owner:", uid, gid' h6 A- D1 i( l. d7 e
    & W8 l) n' G) I6 Q' [8 f
    print "- created:", time.ctime(ctime)9 T: W9 _3 T; c, ^/ c

    # F6 k. z- I. ?/ cprint "- last accessed:", time.ctime(atime)5 g2 {3 N# C% l

    + o( c# W2 g5 f3 H" Y- Rprint "- last modified:", time.ctime(mtime)0 [' M: i0 [: }- R6 o
    ; W3 p5 y# b6 j4 J3 W/ N* Z
    print "- mode:", oct(mode)
    ; g5 o3 {* Z4 ~8 h, P; t0 J0 b# U0 s3 k9 J3 d8 D8 d* @( Y+ s
    print "- inode/dev:", ino, dev$ n  \# m8 b  @, c% E' b3 E* d
    : [% Z6 q  z, S5 R4 y/ H
       
    ' ~7 W' T; y* w- |% K! i7 X$ X
    ( {! l4 N; S$ aprint dir(st)
    / w. K/ n7 b; U; K
    : u2 a4 W. o0 Q8 yprint        
    * X3 `7 _1 T, j, p
    ( t- G, E, ^- cdump(st)
    0 Q% L9 |3 t3 P& J& u5 F
    - t1 `5 {/ O1 k* S# print
    . a  L6 W0 g/ s( q/ Q1 [# |2 Q" p* k6 o, L, o& `
       
    + N% ~5 T6 ?0 L% O" D* a
    + y$ u, e- s) gfp = open(file)
    ) E, a( s! k/ e! Q' R: v( I: F
    ' b0 s* h+ u  t3 U! c5 ?st = os.fstat(fp.fileno())
    2 t9 f; {, s5 ~) s/ R* i* {3 ]1 A$ N( w2 A0 c
    print "fstat", file
    % ]! P! {) {1 ]+ Y/ b$ k
    * c) k$ Q, ^/ i7 n% gdump(st), u1 `9 R" B* E1 [* T6 Q4 {
    # Q7 J# g! _2 `2 c% C6 ~% K! }
       0 j9 t! }0 N  ?

    ) l( U4 J; L0 S6 \( I- Y; R: oremark: 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):
    2 G) E5 m9 Y! V) b" k1 F8 ~2 J7 Z7 N. S; F) S8 i
    os.fstat(path/file)
    + E; D5 ?+ X7 {3 s: b) |1 i- {. H! f) Q# L0 S8 M
    Return status for file descriptor fd, like stat().
    zan
    已有 1 人评分体力 收起 理由
    darker50 + 2 赞一个!

    总评分: 体力 + 2   查看全部评分

    转播转播0 分享淘帖0 分享分享0 收藏收藏1 支持支持1 反对反对0 微信微信
    《舌尖上的中国》所呈现的不只是美食,还有文化。这种被现实挤压而仅存于小时候的记忆,让人回味的同时也唤 ...

    102

    主题

    5

    听众

    913

    积分

    升级  78.25%

  • TA的每日心情
    开心
    2013-4-28 12:11
  • 签到天数: 160 天

    [LV.7]常住居民III

    群组数学软件学习

    darker50 发表于 2012-7-10 16:38
    % e$ \' g6 f1 C; b可以放进文档当成附件下载的!

    : r7 Q, S. x" P$ s- ^* o: g9 o很好的建议哈
    回复

    使用道具 举报

    darker50        

    107

    主题

    45

    听众

    1万

    积分

  • TA的每日心情
    开心
    2015-4-9 15:42
  • 签到天数: 47 天

    [LV.5]常住居民I

    自我介绍
    开朗,爱各种娱乐的不老男生就是我了,喜欢数学建模,喜欢那种帮助别人的感觉。

    社区QQ达人 助人为乐奖 新人进步奖

    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2026-6-14 11:03 , Processed in 0.426042 second(s), 68 queries .

    回顶部