新大榭论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

《新大榭》- 创大榭地方网络社区先锋品牌 新大榭始终专注于地方网络社区平台的建设 关于我们- [大记事]- 留言建议- [新手报道]

发布 .新大榭软件管家(Excel版) V6.0版 财务/仓库/生产/销售/采购/行政/人事/校园 .公告 - 客户 - 打赏 - 职场 - Excel - Python.

新大榭镜像-音乐-法律-图书-高中课堂-实验 广告是为了能更好的发展 [欢迎商家支持本站互利共赢] 广告位招租.首页黄金广告位等您来!联系 13566035181

查看: 520|回复: 1

[模块] 7560 - Python库 AP087【os】内置模块文件操作功能

 关闭 [复制链接]
发表于 2021-8-21 15:48:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转新大榭论坛!

您需要 登录 才可以下载或查看,没有账号?注册

x
Python3  OS 文件/目录方法
9 y; T- u, ^$ U/ c, bos 模块提供了非常丰富的方法用来处理文件和目录。常用的方法如下表所示:

+ ~3 K1 @! |; q- P- C
序号
方法及描述
1
os.access(path, mode)

// 检验权限模式
2
os.chdir(path)

// 改变当前工作目录
3
os.chflags(path, flags)

// 设置路径的标记为数字标记。
4
os.chmod(path, mode)

// 更改权限
5
os.chown(path, uid, gid)

// 更改文件所有者
6
os.chroot(path)

// 改变当前进程的根目录
7
os.close(fd)

// 关闭文件描述符 fd
8
os.closerange(fd_low, fd_high)

// 关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
9
os.dup(fd)

// 复制文件描述符 fd
10
os.dup2(fd, fd2)

// 将一个文件描述符 fd 复制到另一个 fd2
11
os.fchdir(fd)

// 通过文件描述符改变当前工作目录
12
os.fchmod(fd, mode)

// 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
13
os.fchown(fd, uid, gid)

// 修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
14
os.fdatasync(fd)

// 强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。
15
os.fdopen(fd[, mode[, bufsize]])

// 通过文件描述符 fd 创建一个文件对象,并返回这个文件对象
16
s.fpathconf(fd, name)

// 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
17
os.fstat(fd)

// 返回文件描述符fd的状态,像stat()。
18
os.fstatvfs(fd)

// 返回包含文件描述符fd的文件的文件系统的信息,Python 3.3 相等于 statvfs()。
19
os.fsync(fd)

// 强制将文件描述符为fd的文件写入硬盘。
20
os.ftruncate(fd, length)

// 裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。
21
os.getcwd()

// 返回当前工作目录
22
os.getcwdb()

// 返回一个当前工作目录的Unicode对象
23
os.isatty(fd)

// 如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。
24
os.lchflags(path, flags)

// 设置路径的标记为数字标记,类似 chflags(),但是没有软链接
25
os.lchmod(path, mode)

// 修改连接文件权限
26
os.lchown(path, uid, gid)

// 更改文件所有者,类似 chown,但是不追踪链接。
27
os.link(src, dst)

// 创建硬链接,名为参数 dst,指向参数 src
28
os.listdir(path)

// 返回path指定的文件夹包含的文件或文件夹的名字的列表。
29
os.lseek(fd, pos, how)

// 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
30
os.lstat(path)

// 像stat(),但是没有软链接
31
os.major(device)

// 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
32
os.makedev(major, minor)

// 以major和minor设备号组成一个原始设备号
33
os.makedirs(path[, mode])

// 递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
34
os.minor(device)

// 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
35
os.mkdir(path[, mode])

// 以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
36
os.mkfifo(path[, mode])

// 创建命名管道,mode 为数字,默认为 0666 (八进制)
37
os.mknod(filename[, mode=0600, device])

// 创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
38
os.open(file, flags[, mode])

// 打开一个文件,并且设置需要的打开选项,mode参数是可选的
39
os.openpty()

// 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
40
os.pathconf(path, name)

// 返回相关文件的系统配置信息。
41
os.pipe()

// 创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
42
os.popen(command[, mode[, bufsize]])

// 从一个 command 打开一个管道
43
os.read(fd, n)

// 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
44
os.readlink(path)

// 返回软链接所指向的文件
45
os.remove(path)

// 删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
46
os.removedirs(path)

// 递归删除目录。
47
os.rename(src, dst)

// 重命名文件或目录,从 src 到 dst
48
os.renames(old, new)

// 递归地对目录进行更名,也可以对文件进行更名。
49
os.rmdir(path)

// 删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
50
os.stat(path)

// 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
51
os.stat_float_times([newvalue])

// 决定stat_result是否以float对象显示时间戳
52
os.statvfs(path)

// 获取指定路径的文件系统统计信息
53
os.symlink(src, dst)

// 创建一个软链接
54
os.tcgetpgrp(fd)

// 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
55
os.tcsetpgrp(fd, pg)

// 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
56
os.ttyname(fd)

// 返回一个字符串,它表示与文件描述符fd 关联的终端设备。如果fd 没有与终端设备关联,则引发一个异常。
57
os.unlink(path)

// 删除文件路径
58
os.utime(path, times)

// 返回指定的path文件的访问和修改的时间。
59
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

// 输出在文件夹中的文件名通过在树中游走,向上或者向下。
60
os.write(fd, str)

// 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
61
os.path 模块

// 获取文件的属性信息。
62
os.pardir()

// 获取当前目录的父目录,以字符串形式显示目录名。

" J( t" E5 @6 D" y! \& m0 q, }! X9 {. S; G
1
os.tempnam([dir[, prefix]])
Python3 中已删除。返回唯一的路径名用于创建临时文件。
2
os.tmpfile()
Python3 中已删除。返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。
3
os.tmpnam()
Python3 中已删除。为创建一个临时文件返回一个唯一的路径
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
Q群推荐 大榭本地求职招聘QQ群,欢迎转发分享本地招聘信息资讯! 官方招聘1群(已满);官方招聘2群:315816937 *
 楼主| 发表于 2021-11-6 16:48:25 | 显示全部楼层
ps:下面看下python读写、创建文件、文件夹等等
* n$ Q/ ?% `& b! S" j/ n( X
: g6 Q' G5 b) Fpython中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。
' a& E3 @) `: T5 {* K
2 [& P# A) \( s/ a( H得到当前工作目录,即当前Python脚本工作的目录路径:
  1. os.getcwd()
复制代码
" z* m* o6 [% f9 E

8 l* r, v* |+ E- M返回指定目录下的所有文件和目录名:
  1. os.listdir()
复制代码
8 ^$ ^) r2 b: g6 x0 z! {

3 R. q0 s- b, L函数用来删除一个文件:
  1. os.remove()
复制代码

' ~- Y$ r* G( g; Z! a, T( I7 _8 B5 K$ w7 m% d6 r# @/ M" f, n
删除多个目录:
  1. os.removedirs(r“c:\python”)
复制代码
1 G' a, t* d# K! u& F. p
" Y/ Z: x& K' _- n8 z1 A% F
检验给出的路径是否是一个文件:
  1. os.path.isfile()
复制代码
% E. h, b& ?) w2 E8 h; \  m
" V# S3 F* t  h6 m/ N6 c
检验给出的路径是否是一个目录:
  1. os.path.isdir()
复制代码

8 c; b/ H1 @4 h/ z& N2 w! K5 W3 `9 B$ i+ u5 o) t" k- o6 `
判断是否是绝对路径:
  1. os.path.isabs()
复制代码
: a  U$ }# h+ E
- w0 m! P7 z+ U  S0 W7 e, K2 j2 ^
检验给出的路径是否真地存:
  1. os.path.exists()
复制代码
) U8 A. k, o+ P6 B+ e

1 n. f9 h; b8 H; E2 n( T6 ^返回一个路径的目录名和文件名:
  1. os.path.split()
复制代码
8 b, \1 t# I7 B6 k0 b! l
eg
  1. os.path.split('/home/swaroop/byte/code/poem.txt')
复制代码
结果:
  1. ('/home/swaroop/byte/code', 'poem.txt')
复制代码
& h* N* h* B- a/ ]1 N: a
4 o5 i$ p, G! T9 z$ t8 m
分离扩展名:
  1. os.path.splitext()
复制代码

  Z& _8 }$ k+ `* t. x! }: x
( W, c+ C2 N6 `$ r* R7 V* U) g获取路径名:
  1. os.path.dirname()
复制代码
2 E& A8 U1 l* Z: C! L+ {# F9 F

, d7 F+ X- p  f6 o获取文件名:
  1. os.path.basename()
复制代码
3 _) o5 S: f8 B3 j' _* S2 |
7 P" K; L+ s( Z0 L$ e+ u
运行shell命令:
  1. os.system()
复制代码

8 X6 q# |6 e7 D" o4 @6 ^/ n3 O  c/ q" s# \* F% L# ?
读取和设置环境变量:
  1. os.getenv()
复制代码
  1. os.putenv()
复制代码
) n3 }; O' \4 S4 j  A' J

- v3 N9 Y8 ^* Q4 d给出当前平台使用的行终止符:
  1. os.linesep
复制代码
   Windows使用'\r\n',Linux使用'\n'而Mac使用'\r'
/ K" @8 l0 c) L: N8 I. K# j
7 i- T. H! [, A" |1 i1 q指示你正在使用的平台:
  1. os.name
复制代码
      对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. w  b/ Y# `, v8 S
8 Y% `! Y% d7 ]9 t
重命名:
  1. os.rename(old, new)
复制代码
: c' V) J0 [/ \, q
1 y- a0 }! ?# x5 {- C" J' r+ [
创建多级目录:
  1. os.makedirs(r“c:\python\test”)
复制代码

6 c% e$ T. ~& s- b7 @
; z0 f9 \' l  y. D/ w* I2 f创建单个目录:
  1. os.mkdir(“test”)
复制代码
! N. Y! Q: |3 P- H

1 ?% x1 |6 w0 W7 ^& M获取文件属性:
  1. os.stat(file)
复制代码
* a+ B: N& o# [8 ^2 h7 }4 d

" h5 ]' Q) c  b6 l$ u修改文件权限与时间戳:
  1. os.chmod(file)
复制代码
0 {$ v: _! u3 V5 h; j
8 l* I2 S( K0 z$ K& A
终止当前进程:
  1. os.exit()
复制代码
! u3 c( Z0 Z) W
. B& W" j+ F) L0 G
获取文件大小:
  1. os.path.getsize(filename)
复制代码
) `4 @" ]) V8 ^! G

  z% f( a& b8 j: g文件操作:! _  N( T6 U/ H0 ~
2 M# `( ?! A- P; B) M% V6 X
创建空文件
  1. os.mknod("test.txt")
复制代码

" f$ R  I( R  j7 E直接打开一个文件,如果文件不存在则创建文件
  1. fp = open("test.txt",w)
复制代码
' t8 }4 u! b' @: A

  Q" k; L% z3 D2 s" y# h关于open 模式:
9 K0 {; T, c; Fw     以写方式打开,9 w' D3 I. ]3 I6 s8 b% t; A
a     以追加模式打开 (从 EOF 开始, 必要时创建新文件)
* R# ~3 C' \4 ]* i# l, n6 |r+     以读写模式打开
$ Y& y" b; v( @w+     以读写模式打开 (参见 w )
' l4 A4 V' `. U  b6 w. T- J+ ]1 xa+     以读写模式打开 (参见 a )
0 g  F; N+ U- |rb     以二进制读模式打开5 |4 n9 b# A* ~0 ^
wb     以二进制写模式打开 (参见 w )# o# d, w  V  w
ab     以二进制追加模式打开 (参见 a )
1 p& H  d; i) }( u& Mrb+    以二进制读写模式打开 (参见 r+ )& S8 r+ [4 C0 T: N
wb+    以二进制读写模式打开 (参见 w+ )" A$ d; p" m# c8 F
ab+    以二进制读写模式打开 (参见 a+ )
+ l  Y3 R7 z* k. Q8 _+ J8 F; t8 W+ E+ N- Q% b! P
  1. fp.read([size])
复制代码
                    #size为读取的长度,以byte为单位
' R) J( }7 W5 ]3 e% [4 ^9 T
  1. fp.readline([size])
复制代码
                #读一行,如果定义了size,有可能返回的只是一行的一部分
4 z+ D6 S! E/ C6 h; `
! ?* L  `; r8 w8 _9 R* O7 |: N
  1. fp.readlines([size])
复制代码
               #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。( t* |2 u5 I5 |: o0 S- `( `
/ F0 a( b* N: v/ i8 f: I# }
  1. fp.write(str)
复制代码
                     #把str写到文件中,write()并不会在str后加上一个换行符
: P$ N2 Z# n: @# [3 s5 T# u! o/ x/ w0 o6 L) ]2 K
  1. fp.writelines(seq)
复制代码
           #把seq的内容全部写到文件中(多行一次性写入)。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
& }9 G3 I! l" c0 Y! q0 I: @5 \3 n: w/ y6 I
  1. fp.close()
复制代码
                       #关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。  如果一个文件在关闭后还对其进行操作会产生ValueError4 {& v! t2 c+ F' s+ q+ Y

& D: l+ V" |8 F
  1. fp.flush()
复制代码
                                     #把缓冲区的内容写入硬盘
+ i8 \8 @0 c) y4 ^8 ~! w- h ! M; x4 j$ o( i9 x% a4 S
  1. fp.fileno()
复制代码
                                     #返回一个长整型的”文件标签“/ u4 j  K. K4 L) n. T! u

* Z" Y6 t( \, |" E/ g  r, @- \! ]  c' m
  1. fp.isatty()
复制代码
                                     #文件是否是一个终端设备文件(unix系统中的)
- j$ D- V0 m* b% i( _( G" W7 S/ R, z6 H0 X: H( w/ I: q5 Y
  1. fp.tell()
复制代码
                                        #返回文件操作标记的当前位置,以文件的开头为原点" v2 T5 n* i$ e! L3 h
' p# v" U* N0 r' A4 I
  1. fp.next()
复制代码
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for … in file这样的语句时,就是调用next()函数来实现遍历的。
/ N5 _4 ?' o/ ^  W4 D9 q% ~+ O/ A9 O1 b8 k1 P; g  l) Q" h
  1. fp.seek(offset[,whence])
复制代码
             #将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
8 G3 F) f$ `% ^/ E  G7 J0 b7 ?7 y% e
  1. fp.truncate([size])
复制代码
                      #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。' j. y1 P+ |8 g- P8 Y6 v% U

5 [7 O2 t! I5 K3 B目录操作:
; D7 Y7 \. F$ u8 e5 x8 v" Z2 ]/ c. R! [: G% n! s: i, |
  1. os.mkdir("file")
复制代码
                  创建目录
8 V( `  H9 d( I2 n6 Q9 K8 p复制文件:
2 m: I/ L0 E6 g2 L, _7 X
  1. shutil.copyfile("oldfile","newfile")
复制代码
      oldfile和newfile都只能是文件, F5 e* C0 z. t8 Y9 J" e+ i
  1. shutil.copy("oldfile","newfile")
复制代码
           oldfile只能是文件夹,newfile可以是文件,也可以是目标目录: E; @& z0 ^4 H' j" X+ Q- O
复制文件夹:  [$ K5 ?, ?: {+ `* N
  1. shutil.copytree("olddir","newdir")
复制代码
       olddir和newdir都只能是目录,且newdir必须不存在& g3 B1 I. o" ]; {, S" W* B
重命名文件(目录)
3 @" ^* t3 X- E1 N; c9 l6 j
  1. os.rename("oldname","newname")
复制代码
      文件或目录都是使用这条命令: t. v# V, l$ B
移动文件(目录)
, q+ o, N! c  o  b1 w% ]
  1. shutil.move("oldpos","newpos")
复制代码
1 c3 B2 P2 ~2 N( W4 [
删除文件
6 H& V: g2 H! V0 d% d# a  e! j6 s
  1. os.remove("file")
复制代码

% G- x& J. j+ {& p0 r5 V删除目录/ x+ v7 `1 S6 M3 p% Y1 J
  1. os.rmdir("dir")
复制代码
   只能删除空目录& t: I+ z) l1 c4 C0 R% t
  1. shutil.rmtree("dir")
复制代码
   空目录、有内容的目录都可以删
0 w9 i$ V" U% I8 V转换目录
3 Z( E% L# c6 c* X
  1. os.chdir("path")
复制代码
  换路径0 F  ]9 y  T% @
0 s- {. Y8 c5 R) j
. Q: ]$ a' c; _6 n
Python读写文件: _3 }/ x$ `  t# E. K! C

! x3 A% P$ j: f' _9 g9 c1.open
( Y- |  L: ^  j5 V! M使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。; O7 P2 }5 o( P: w) H  a0 e
5 Y. X5 |  b8 i: v; B
  1. file_object = open('thefile.txt'), n- [* j) w% I' S3 ~/ ?
  2. try:
    " e5 f! @; y% J8 ~1 I. q4 V6 G
  3.    all_the_text = file_object.read( )! z. M6 a' q/ ^9 q" M# y
  4. finally:
    4 l7 i( f# R& Y1 w; \4 [+ W! v
  5.    file_object.close( )
复制代码
1 N1 L" ]8 a4 C3 D  t! v
注:不能把open语句放在try块里,因为当打开文件出现异常时,文件对象file_object无法执行close()方法。/ H- L1 N  m# g( G
1 y/ c# K4 _/ ~1 J5 T
2.读文件
, W0 R( b' m$ u  P9 r# L9 O
1 A) O  C2 q' {+ `读文本文件
6 f2 k! R0 [! F" Q8 g
  1. input = open('data', 'r')$ t: M5 ]1 S3 p4 Y# M& P7 e
  2. #第二个参数默认为r6 S& J! N& Y2 j6 s2 q8 H+ w
  3. input = open('data')
    6 g& W/ I2 b7 K* L  X0 K4 s& @" k
  4. 读二进制文件0 v4 i/ Q' S+ E4 o) H9 L
  5. input = open('data', 'rb')
复制代码

) ]; Z: A8 e$ W) M2 r) B
; [7 F) _9 o+ R" j* H4 q读取所有内容
+ _* ?/ `: ~& U5 k4 p3 \
  1. file_object = open('thefile.txt')3 T: ], `9 G" w3 O/ k8 j  Z  H7 B
  2. try:
    ; ?" [! ^& N+ b4 j2 C& H5 d4 u1 D: |
  3.    all_the_text = file_object.read( )
    ! m: f) Z+ N9 y, S1 b- h/ f6 ]
  4. finally:
      `0 V0 S6 Y& y$ ]' \4 N
  5.    file_object.close( )
复制代码

- A; [3 L3 s8 _6 a. W  c) N0 U
; X" U2 W. _3 B9 N( I. Z读固定字节
% q* G0 ?: y  Z, w/ P* H' g
  1. file_object = open('abinfile', 'rb')
    9 u4 s2 P. Y) V5 J! p7 `2 S
  2. try:
    5 ]# P+ ?4 o9 n" n* `
  3.   while True:
    - B. `- ^/ u$ c2 f" f6 S
  4.      chunk = file_object.read(100)1 y+ [% |- c% r4 y
  5.     if not chunk:
    6 \9 o* a4 ^$ h2 f. y/ {
  6.       break9 h. s' N; l  z0 g% p
  7.      do_something_with(chunk)
      H2 O1 \4 U+ L; m; `8 F: c
  8. finally:9 u: b* ~: a9 @3 r6 u
  9.    file_object.close( )
复制代码

* e8 n# N' s- ]; o: t/ E1 H% Q5 @" N/ h/ Z2 t7 w; n
读每行
  X4 P- k  K+ P$ d
  1. list_of_all_the_lines = file_object.readlines( )
复制代码
. d& H, J3 x( A4 u- G
' t4 c1 @( F) k, A
如果文件是文本文件,还可以直接遍历文件对象获取每行:
& m; S# V4 r' t( C
  1. for line in file_object:
    7 S* N. C  s+ s. r5 o9 i
  2.    process line
复制代码
* h( i. k+ T$ @( o0 ?% J5 [
4 b+ H- d" D  f4 N+ ^
3.写文件/ `0 d( r/ L& {& _
: g7 ]6 C' y- D( A+ D$ m: J
写文本文件+ {5 A7 q" d  R" p( ?% W
  1. output = open('data', 'w')
复制代码

4 L3 G; {: s" S  K2 h
7 [7 [8 v, c. G! o; a- b4 T0 a3 J写二进制文件
6 [9 {9 a7 ?$ E! ?: K" n/ c
  1. output = open('data', 'wb')
复制代码

) I& f' ^3 Y4 g
6 j* V, p6 D3 u追加写文件- [. I, |3 t/ S, h$ z
  1. output = open('data', 'w+')
复制代码

7 w9 e, d# f3 A- A
2 k) V" @+ I; B5 P' Q3 {( Q写数据% J6 U& e9 L  _3 R
  1. file_object = open('thefile.txt', 'w')
    $ V8 g# l# K3 j% g5 _
  2. file_object.write(all_the_text)
    + ?) ?5 L8 }: w+ w- ?. h5 o
  3. file_object.close( )
复制代码

$ h! P, m+ H. [4 a" o* f' r- H* R3 h- |3 l- p1 C( J
写入多行, w+ d+ X+ S7 ~! E. d& P
  1. file_object.writelines(list_of_text_strings)
复制代码

% V0 B( ~/ A7 J" l  H  h/ c3 ~) `, ~) ~  K7 }1 K  K
注意,调用writelines写入多行在性能上会比使用write一次性写入要高。
, `! R" w9 O! I. w
5 I- z. V& K% m! Z在处理日志文件的时候,常常会遇到这样的情况:日志文件巨大,不可能一次性把整个文件读入到内存中进行处理,例如需要在一台物理内存为 2GB 的机器上处理一个 2GB 的日志文件,我们可能希望每次只处理其中 200MB 的内容。
! g8 H* W8 K4 i# ?& c" h3 @2 _  ^在 Python 中,内置的 File 对象直接提供了一个 readlines(sizehint) 函数来完成这样的事情。以下面的代码为例:, Z, }! ~  i6 E
  1. file = open('test.log', 'r')sizehint = 209715200  # 200Mposition = 0lines = file.readlines(sizehint)while not file.tell() - position < 0:    position = file.tell()    lines = file.readlines(sizehint)
复制代码
: Z) c/ d' f: G; y" d3 C
每次调用 readlines(sizehint) 函数,会返回大约 200MB 的数据,而且所返回的必然都是完整的行数据,大多数情况下,返回的数据的字节数会稍微比 sizehint 指定的值大一点(除最后一次调用 readlines(sizehint) 函数的时候)。通常情况下,Python 会自动将用户指定的 sizehint 的值调整成内部缓存大小的整数倍。
) O: {5 e( _) B) }+ Q6 I5 b9 {3 P2 o1 q) n' P& b) v9 j
file在python是一个特殊的类型,它用于在python程序中对外部的文件进行操作。在python中一切都是对象,file也不例外,file有file的方法和属性。下面先来看如何创建一个file对象:
( o3 Z/ Y3 [' K+ j7 d3 T  o% z+ a
, T2 Y9 _2 F: u5 @
  1. file(name[, mode[, buffering]])
复制代码
+ a! n  e- [7 Y5 n3 v/ [& X
file()函数用于创建一个file对象,它有一个别名叫open(),可能更形象一些,它们是内置函数。来看看它的参数。它参数都是以字符串的形式传递的。name是文件的名字。& G: t- A6 S5 U9 Z- D
mode是打开的模式,可选的值为r w a U,分别代表读(默认) 写 添加支持各种换行符的模式。用w或a模式打开文件的话,如果文件不存在,那么就自动创建。此外,用w模式打开一个已经存在的文件时,原有文件的内容会被清空,因为一开始文件的操作的标记是在文件的开头的,这时候进行写操作,无疑会把原有的内容给抹掉。由于历史的原因,换行符在不同的系统中有不同模式,比如在 unix中是一个\n,而在windows中是‘\r\n',用U模式打开文件,就是支持所有的换行模式,也就说‘\r' '\n' '\r\n'都可表示换行,会有一个tuple用来存贮这个文件中用到过的换行符。不过,虽说换行有多种模式,读到python中统一用\n代替。在模式字符的后面,还可以加上+ b t这两种标识,分别表示可以对文件同时进行读写操作和用二进制模式、文本模式(默认)打开文件。" j' ~/ G2 a" O; o6 n; R
buffering如果为0表示不进行缓冲;如果为1表示进行“行缓冲“;如果是一个大于1的数表示缓冲区的大小,应该是以字节为单位的。; C( |5 k8 _+ f) F' g/ z$ W

! S, P: p' g5 c+ I. e7 `file对象有自己的属性和方法。先来看看file的属性。0 p$ C" X% U, m% ~, Y

* R9 ?5 b: _: l6 r  nclosed #标记文件是否已经关闭,由close()改写; g" f  K' P7 l3 X
encoding #文件编码/ z: e  o, \% Y2 g# t8 ^
mode #打开模式2 L5 _# T7 v* j
name #文件名' h, S" V7 b' D% o. Z: z  \/ A- b
newlines #文件中用到的换行模式,是一个tuple; x0 k# L$ [5 ?4 J  i' P! c, {" c
softspace #boolean型,一般为0,据说用于print
+ A0 `. `- G$ u  U( @6 d1 x; e+ D7 @- ]3 ]2 J+ w$ W
file的读写方法:
# T# ?" x& @- ^: [, H2 b1 q6 V% n8 H+ q% c! o# |6 P- q/ ^
F.read([size]) #size为读取的长度,以byte为单位
, d! i# x6 Z* h2 c  D3 j* S& ZF.readline([size])
2 k& o4 o* v+ S+ A, L1 j# d0 i5 Q7 Y& \#读一行,如果定义了size,有可能返回的只是一行的一部分
  [5 f# \9 x- {* `F.readlines([size])
6 @! g- x4 n8 O( Z4 v#把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。) N+ e; [" F- P) R
F.write(str)8 e4 C  e: D( `( d+ C1 s
#把str写到文件中,write()并不会在str后加上一个换行符
6 v. d2 b8 P: ~% e) r- t, x; LF.writelines(seq)# T* B$ @" ~9 F
#把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西。
+ C1 \# O/ o2 T% Q- l! A3 u% ]" [) L( w# t( ]
file的其他方法:
3 w3 b; o" i/ I; o
2 a  j+ T0 h9 L6 S4 D. a/ \$ sF.close()0 _! m6 C& C7 T8 Y5 X0 J
#关闭文件。python会在一个文件不用后自动关闭文件,不过这一功能没有保证,最好还是养成自己关闭的习惯。如果一个文件在关闭后还对其进行操作会产生ValueError$ {( p/ x( ?' w, f7 [6 L  x
F.flush()  O: C* D# x' _1 r
#把缓冲区的内容写入硬盘1 b4 q1 s7 a; J- i& s$ c
F.fileno()* z! M  j. M/ h8 t+ b0 X5 X
#返回一个长整型的”文件标签“  S6 O1 s% |/ @% e. n: @2 t
F.isatty()6 \& v2 C5 b+ j; u
#文件是否是一个终端设备文件(unix系统中的)
/ w1 T  R2 N; C" n1 h, BF.tell()
4 c4 }6 h$ u0 _# O$ c#返回文件操作标记的当前位置,以文件的开头为原点' H+ R8 d1 \. T. `
F.next()! Y. E: _5 d8 Q* ?, F; Y& M) O
#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的。  G0 a3 j' _" Y- g/ l0 b  Z
F.seek(offset[,whence])- s3 ]( F1 {/ A( Q
#将文件打操作标记移到offset的位置。这个offset一般是相对于文件的开头来计算的,一般为正数。但如果提供了whence参数就不一定了,whence可以为0表示从头开始计算,1表示以当前位置为原点计算。2表示以文件末尾为原点进行计算。需要注意,如果文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。
; V8 D, f$ w$ T  XF.truncate([size])4 w% Y$ `( Y. ^+ A* S+ c  @
#把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去。
2 F7 Z" ]0 A# L4 Q  ?/ E+ v' z8 |' s  j6 l" M8 T5 C- i) w
总结
: T" L8 ~. C! L7 }, e# R' t
: W' `2 V) m0 O2 h以上所述是小编给大家介绍的python 实现创建文件夹和创建日志文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
新大榭Python学习社区培训、Excel业务指导、办公软件定制、网站建设;新大榭探索实验室欢迎您!http://lab.daxie.net.cn/
新大榭官方公益帮帮群:6603298 官方Excel学习交流群:82064486  欢迎您加入
您需要登录后才可以回帖 登录 | 注册

本版积分规则

文字版|小黑屋|新大榭 ( 浙ICP备16018253号-1 )|点击这里给站长发消息|

GMT+8, 2026-2-12 07:30 , Processed in 0.087820 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表