文件的相关函数
1、readline()功能:读取一行内容
readline(字符数):如果给的参数大于当前行字符数,只获取当前行所有内容
如果给参数小于当前行的字符数,按照实际给的参数进行字符的获取
E:\测试.txt 文件内容:
你好
Hello,world
请说再见
with open('E:\测试.txt',mode='r+',encoding='gbk') as demo:
demos = demo.readline(3)
while demos:
print(demos)
demos = demo.readline(3)
运行结果:
你好
Hel
lo,
wor
ld
请说再
见
2、readlines()功能:将文件中的内容按照换行读取
还以测试.txt为例
with open('E:\测试.txt',mode='r+',encoding='gbk') as demo:
demos = demo.readlines()
for i in demos:
print(i)
运行结果:
你好
Hello,world
请说再见
3、writelines()功能:将内容是字符串的可迭代性数据写入文件中。需要一个参数,注意参数内容为字符串类型的可迭代数据
with open('E:\测试.txt',mode='r+',encoding='gbk') as demo:
list1 = ['\n假书生','学习python']
demo.writelines(list1)
demos = demo.readlines()
for i in demos:
print(i)
运行结果:
你好
Hello,world
请说再见
假书生学习python
4、truncate()功能:要把截取的字符串提取出来,然后清空后面的内容
with open('E:\测试.txt',mode='r+',encoding='utf-8') as demo:
demo.write("hello,world")
demo.truncate(5)
demo.seek(0)
print(demo.read())
运行结果:
hello
####### 注意区分
read(字符)
readline(字符)
seek(字节)
truncate(字节)
tell返回的是字节
Python大文件读取方式
调用read()会一次性读取文件的全部内容,如果文件有10G,内存就爆了,所以,要保险起见,可以反复调用read(size)方法,每次最多读取size个字节的内容。另外,调用readline()可以每次读取一行内容,调用readlines()一次读取所有内容并按行返回list。因此,要根据需要决定怎么调用。
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
分块读取
处理大文件是很容易想到的就是将大文件分割成若干小文件处理,处理完每个小文件后释放该部分内存。这里用了iter 和 yield:
def readInChunks(fileObj, chunkSize=4096):
"""
Lazy function to read a file piece by piece.
Default chunk size: 4kB.
"""
while 1:
data = fileObj.read(chunkSize)
if not data:
break
yield data
f = open('bigFile')
for chuck in readInChunks(f):
#do_something(chunk)
f.close()