文件读写
一、文件打开open
文件打开针对当前的工作目录。
可以使用os.chdir() 来改变工作目录
1.1 open的两种方式
1.手动挡,需要手动关闭
f = open('1.py', 'r') print(f.read()) f.close()
2.自动挡,使用with管理上下文,自动关闭
with open('1.py', 'r') as f: print(f.read())
1.2 文件读写模式
# 基本三种模式
r 以只读模式打开文件,并将文件指针指向文件头;如果文件不存在会报错
w 以只写模式打开文件,并将文件指针指向文件头;如果文件存在则将其内容清空,如果文件不存在则创建
a 以只追加可写模式打开文件,并将文件指针指向文件尾部;如果文件不存在则创建
# 扩展模式
r+ 在r的基础上增加了可写功能,文件指针指向开头
w+ 在w的基础上增加了可读功能, w+,跟w一样,增加了可读功能。
a+ 在a的基础上增加了可读功能,不管文件指针在哪,都移到末尾
在上面这几种模式中,都可以混搭一个b模式,以二进制的方式进行读写。
保证在扩平台或其他操作,读写正确。 在lunux下会忽略b,默认就是二进制读取
二、文件读操作
2.1 read()
直接read(),获取全部,一次性存入内存中。返回一个字符串。 针对大文件出错
2.2 read(size)
指定size读取,可以解决大文件读取出错。
while True: block = f.read(1024) if not block: break
2.3 readline()
每次读取一行
while True: line = f.readline() if not line: break
2.4 readlines():
读取全部的行,构成一个list,通过list来对文件进行处理,但是这种方式依然会造成MemoyError
for line in f.readlines(): ....
2.5 使用文件描述符,可迭代对象
with open(filename, 'r') as flie: for line in file: ....
三、文件写操作
写操作就比较的简单了,两种方法
3.1 write()
参数为字符串
3.2 writeline()
参数为一个序列,比如列表
四、文件定位
with open('2.py', 'w+', encoding='utf-8') as f:
f.write('我是中国人')
print(f.tell()) # 使用字节来计算,一个汉字3字节,输出15
f.seek(0)
print(f.read(3)) # 使用字符来计算,输出 '我是中',因为读的时候有空格或其他符号(1个字节会错乱)