python的⽂件操作⽅法
python中的⽂件对象:
⽂件对象不仅可以⽤来访问普通的磁盘⽂件, ⽽且也可以访问任何其它类型抽象层⾯上的"⽂
件". ⼀旦设置了合适的"钩⼦", 你就可以访问具有⽂件类型接⼝的其它对象, 就好像访问的是普
通⽂件⼀样.
⽂件内建函数[open()和 file()]
1 open('filename')
2 with open('filename') as f:
3 pass
open函数使⽤⼀个⽂件名作为唯⼀的强制参数,然后返回⼀个⽂件对象。模式和缓冲参数都是可选的,默认为只读模式打开⽂件。使⽤with即使发⽣错误可以关闭⽂件,
下⾯列出⽂件对象的访问的模式:
1⽂件模式操作
2 r 以只读⽅式打开
3 rU 或 Ua 以读⽅式打开, 同时提供通⽤换⾏符⽀持 (PEP 278)
4 w 以写⽅式打开 (必要时清空)
5 a 以追加模式打开 (从 EOF 开始, 必要时创建新⽂件)
6 r+ 以读写模式打开
7 w+ 以读写模式打开 (参见 w )
8 a+ 以读写模式打开 (参见 a )
9 rb 以⼆进制读模式打开
10 wb 以⼆进制写模式打开 (参见 w )
11 ab 以⼆进制追加模式打开 (参见 a )
12 rb+ 以⼆进制读写模式打开 (参见 r+ )
13 wb+ 以⼆进制读写模式打开 (参见 w+ )
14 ab+ 以⼆进制读写模式打开 (参见 a+ )
15 x 如果⽂件存在报错,不存在则创建
16 ***加b模式打开,不可以在指定encoding,切写⼊时也需要转换为字节写⼊⽂件
17
18下⾯是⼀些打开⽂件的例⼦:
19 f = open('/etc/motd') # 以读⽅式打开
20 f = open('test', 'w') # 以写⽅式打开
21 f = open('data', 'r+') # 以读写⽅式打开
22 f = open('io.sys', 'rb') # 以⼆进制读模式打开
23
24 bytes 字符串转换字节类型
25 n=bytes(李杰,encoding='utf-8')[转换的字符,可以是变量,转换后的编码]
26字节转换为字符串
27 str(bytes(李杰,encoding='utf-8'),encoding='utf-8)
28⽂件操作
open() 和 file() 函数具有相同的功能, 可以任意替换.任何使⽤ open() 的地⽅, 都可以使⽤ file() 替换它.建议使⽤ open() 来读写⽂件, 在处理⽂件对象时使⽤ file() 。open() 成功执⾏并返回⼀个⽂件对象之后, 所有对该⽂件的后续操作都将通过这个"句柄"进⾏.
⽂件⽅法可以分为四类: 输⼊, 输出, ⽂件内移动, 以及杂项操作.
输⼊
read() ⽅法⽤来直接读取字节到字符串中, 最多读取给定数⽬个字节. 如果没有给定 size
参数(默认值为 -1)或者 size 值为负, ⽂件将被读取直⾄末尾.
指定读取size:
readline() ⽅法读取打开⽂件的⼀⾏(读取下个⾏结束符之前的所有字节). 然后整⾏,包括⾏
结束符,作为字符串返回. 和 read() 相同, 它也有⼀个可选的 size 参数, 默认为 -1, 代表读⾄
⾏结束符. 如果提供了该参数, 那么在超过 size 个字节后会返回不完整的⾏.
readlines() ⽅法并不像其它两个输⼊⽅法⼀样返回⼀个字符串. 它会读取所有(剩余的)⾏然
后把它们作为⼀个字符串列表返回. 它的可选参数 sizhint 代表返回的最⼤字节⼤⼩. 如果它⼤
于 0 , 那么返回的所有⾏应该⼤约有 sizhint 字节(可能稍微⼤于这个数字, 因为需要凑齐缓冲区
⼤⼩).
输出
write() 内建⽅法功能与 read() 和 readline() 相反. 它把含有⽂本数据或⼆进制数据块的
字符串写⼊到⽂件中去.
⽂件内移动
seek() ⽅法(类似 C 中的 fseek() 函数)可以在⽂件中移动⽂件指针到不同的位置. offset
字节代表相对于某个位置偏移量. 位置的默认值为 0 , 代表从⽂件开头算起(即绝对偏移量), 1 代
表从当前位置算起, 2 代表从⽂件末尾算起. 如果你是⼀个 C 程序员,并且使⽤过了 fseek() , 那
么,0, 1, 2 分别对应着常量 SEEK_SET, SEEK_CUR, 以及 SEEK_END. 当⼈们打开⽂件进⾏读写操
作的时候就会接触到 seek()⽅法。
#跳过前五个字符,读取之后的内容truncate() ⽅法, 它接受⼀个可选的 size 作为参数. 如果给定, 那么⽂
件将被截取到最多 size 字节处. 如果没有传递 size 参数, 那么默认将截取到⽂件的当前位置.
例如, 你刚打开了⼀个⽂件, 然后⽴即调⽤ truncate() ⽅法, 那么你的⽂件(内容)实际上被删除,
这时候你是其实是从 0 字节开始截取的( tell() 将会返回这个数值 )
其他:
close()
关闭⽂件来结束对它的访问. Python 垃圾收集机制也会在⽂件对象的引⽤计数降
⾄零的时候⾃动关闭⽂件. 这在⽂件只有⼀个引⽤时发⽣, 例如 f = open(...), 然后 f 在原⽂
件显式地关闭前被赋了另⼀个⽂件对象. 良好的编程习惯要求在重新赋另个⽂件对象前关闭这个⽂
件. 如果你不显式地关闭⽂件, 那么你可能丢失输出缓冲区的数据.
fileno() ⽅法返回打开⽂件的描述符. 这是⼀个整数, 可以⽤在如 os 模块( os.read() )的
⼀些底层操作上
flush() ⽅法会直接把内部缓冲区中的数据⽴刻写⼊⽂件, ⽽不是被动地等待输出缓冲
区被写⼊. isatty() 是⼀个布尔内建函数, 当⽂件是⼀个类 tty 设备时返回 True , 否则返回
False . truncate() ⽅法将⽂件截取到当前⽂件指针位置或者到给定 size , 以字节为单位.
⽂件对象的内建⽅法列表
1⽂件对象的⽅法操作
2 file.close() 关闭⽂件
3 file.fileno() 返回⽂件的描述符(file descriptor ,FD, 整数值)
4 file.flush() 刷新⽂件的内部缓冲区
5 file.isatty() 判断 file 是否是⼀个类 tty 设备
a() 返回⽂件的下⼀⾏(类似于 adline() ), 或在没有其它⾏时
7引发 StopIteration 异常
ad(size=-1) 从⽂件读取 size 个字节, 当未给定 size 或给定负值的时候, 读
9取剩余的所有字节, 然后作为字符串返回.如果打开模式⽆b,则read按字符读取,否则按字节读取
adline(size=-1) 从⽂件中读取并返回⼀⾏(包括⾏结束符), 或返回最⼤ size
11 file=open('test','ab')
12 file.write(bytes('hehe',encoding='utf-8')) 向⽂件写⼊字符串 (会覆盖原有数据,坑
13 file.close() 关闭⽂件
ll获取当前指针的位置
ad()如果打开模式⽆b,则read按字符读取,否则按字节读取
16 file.fileno⽂件描述符
uncat 截断数据,清除⽂件指针之后的数据
18 file.seek(off, whence=0) 在⽂件中移动⽂件指针, 从 whence ( 0 代表⽂件其始, 1代表当前位置, 2 代表⽂件末尾)偏移 off 字节,不论是否有中⽂,都以字节为单位
uncate(ll()) 截取⽂件到最⼤ size 字节, 默认为当前⽂件位置
20 file.writelines(seq) 向⽂件写⼊字符串序列 seq ; seq 应该是⼀个返回字符串的
21可迭代对象
adlines(sizhint=0) 读取⽂件的所有⾏并作为⼀个列表返回(包含所有的⾏结束
23符);
对⽂件系统的访问
对⽂件系统的访问⼤多通过 Python 的 os 模块实现. 该模块是 Python 访问操作系统功能的主
要接⼝.
os 模块的⽂件/⽬录访问函数
⽂件处理
1 mkfifo()/mknod()a 创建命名管道/创建⽂件系统节点
2 remove()/unlink() Delete file 删除⽂件
3 rename()/renames()b 重命名⽂件
4 *statc() 返回⽂件信息
5 symlink() 创建符号链接
6 utime() 更新时间戳
7 tmpfile() 创建并打开('w+b')⼀个新的临时⽂件
8 walk()a ⽣成⼀个⽬录树下的所有⽂件名
⽬录/⽂件夹
1 chdir()/fchdir()a 改变当前⼯作⽬录/通过⼀个⽂件描述符改变当前⼯作⽬录
2 chroot()d 改变当前进程的根⽬录
3 listdir() 列出指定⽬录的⽂件
4 getcwd()/getcwdu()a返回当前⼯作⽬录/功能相同, 但返回⼀个 Unicode 对象
5 mkdir()/makedirs() 创建⽬录/创建多层⽬录
6 rmdir()/removedirs() 删除⽬录/删除多层⽬录
访问/权限
1 access() 检验权限模式
2 chmod() 改变权限模式
3 chown()/lchown()a 改变 owner 和 group ID/功能相同, 但不会跟踪链接
4 umask() 设置默认权限模式
⽂件描述符操作
1 open() 底层的操作系统 open (对于⽂件, 使⽤标准的内建 open() 函数)
2 read()/write() 根据⽂件描述符读取/写⼊数据
3 dup()/dup2() 复制⽂件描述符号/功能相同, 但是是复制到另⼀个⽂件描述符
设备号
1 makedev()a 从 major 和 minor 设备号创建⼀个原始设备号
2 major()a /minor()a 从原始设备号获得 major/minor 设备号
os.path 可以完成⼀些针对路径名的操作. 它提供的函数可以完成管理和操作⽂
件路径名中的各个部分, 获取⽂件或⼦⽬录信息, ⽂件路径查询等操作
os.path 模块中的路径名访问函数
分隔
1 basename() 去掉⽬录路径, 返回⽂件名
2 dirname() 去掉⽂件名, 返回⽬录路径
3 join() 将分离的各部分组合成⼀个路径名
4 split() 返回 (dirname(), basename()) 元组
5 splitdrive() 返回 (drivename, pathname) 元组
6 splitext() 返回 (filename, extension) 元组
信息
1 getatime() 返回最近访问时间
2 getctime() 返回⽂件创建时间
3 getmtime() 返回最近⽂件修改时间
4 getsize() 返回⽂件⼤⼩(以字节为单位)
查询
1 exists() 指定路径(⽂件或⽬录)是否存在
2 isabs() 指定路径是否为绝对路径
3 isdir() 指定路径是否存在且为⼀个⽬录
4 isfile() 指定路径是否存在且为⼀个⽂件
5 islink() 指定路径是否存在且为⼀个符号链接
6 ismount() 指定路径是否存在且为⼀个挂载点
7 samefile() 两个路径名是否指向同个⽂件
还有⼤量的其它模块与⽂件和输⼊/输出有关, 它们中的⼤多数都可以在主流平台上⼯作.
1 base64 提供⼆进制字符串和⽂本字符串间的编码/解码操作
2 binascii 提供⼆进制和 ASCII 编码的⼆进制字符串间的编码/解码操作
3 bz2a 访问 BZ2 格式的压缩⽂件
4 csv 访问 csv ⽂件(逗号分隔⽂件)
5 filecmpb ⽤于⽐较⽬录和⽂件
6 fileinput 提供多个⽂本⽂件的⾏迭代器
7 getopt/optparsea 提供了命令⾏参数的解析/处理
8 glob/fnmatch 提供 Unix 样式的通配符匹配的功能
9 gzip/zlib 读写 GNU zip( gzip) ⽂件(压缩需要 zlib 模块)
10 shutil 提供⾼级⽂件访问功能
11 c/StringIO 对字符串对象提供类⽂件接⼝
12 tarfilea 读写 TAR 归档⽂件, ⽀持压缩⽂件
writelines()方法将什么写入文件13 tempfile 创建⼀个临时⽂件(名)
14 uu 格式的编码和解码
15 zipfilec ⽤于读取 ZIP 归档⽂件的⼯具
下⾯列举⼏个简单的⽰例:
对⽂件进⾏迭代⽽不使⽤变量存储⽂件对象
1for line in open(finename):
2print(line)
同时打开两个⽂件
1 with open('') as f,open('') as f2:
2pass
获取⽂件前⼗⾏
1 with open('db1', 'r', encoding="utf-8") as f1, open("db2", 'w',encoding="utf-8") as f2:
2 times = 0
3for line in f1:
4 times += 1
5if times <=10:
6 f2.write(line)
7else:
8break
替换⽂件内指定的字符串
1 with open('db1', 'r', encoding="utf-8") as f1, open("db2", 'w',encoding="utf-8") as f2: 2for line in f1:
3 new_str = place("alex", 'st')
4 f2.write(new_str)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论