open
函数的返回值就是文件对象, 提供了一些 api 让我们去操作文件的内容
file 对象的常用方法
read([length])
读取文件的内容. 如果读取的文本文件, 则返回的是字符串. 如果是二进制文件, 返回的是一个
bytes object
.参数是读取的最大字节数, 文本就是最大的字符串数. 如果省略或者是负值, 表示读取文件的全部内容.
如果读到文件末尾, 则返回一个空字符串
''
(长度为0的字符串)
file = open("test.txt", "r+t", encoding="utf-8")
text = file.read()
print(text)
text = file.read()
if text == "":
print("---文件读取结束了---")
readline()
读取文本文件. 读取一行字符. 使用
\n
作为换行符. 如果是 window 系统则会把\r\n
转换成\n
换行符(
\n
)也会读取到返回的字符串中.
file = open("test.txt", "r+t", encoding="utf-8")
line = file.readline()
print(line, end="")
使用循环读取完所有的行
file = open("test.txt", "r+t", encoding="utf-8")
while True:
line = file.readline()
if line == "":
break
print(line, end="")
最好的办法是使用for
循环, 省内存, 快速, 代码少
file = open("test.txt", "r+t", encoding="utf-8")
for line in file:
print(line, end="")
readlines()
这个方法是把所有的行放入到一个列表中, 然后你就可以去使用这个列表了.
也可以使用 list(file)
达到同样的目的
file = open("test.txt", "r+t", encoding="utf-8")
lines = file.readlines()
print(lines)
write(string)
向文件中写入字符串, 并返回写入的字符的个数.
file = open("new.txt", "w+", encoding="utf-8")
count = file.write("你好啊abc")
print(count)
注意:
如果文件模式使用
a+
, 则文件不存在会抛出异常.w+
, 文件不存在会自动创建文件, 并写入a+
, 追加的方式写入文件
如果是写入的其他类型的数据, 则写之前需要手动转换
根据你打开文件的模式, 来决定到底是转成字符串还是转成字节对象
file = open("new.txt", "w+t", encoding="utf-8")
nums = ("a", "b", "你 好", 30)
file.write(str(nums))
文件内容:
writelines()
把存储字符串的列表直接写入到文件中
写入的时候不会自动帮你格式化, 会把每个字符串元素挨个写在一起, 你应该在写入之前自行处理好格式
file = open("new.txt", "w+t", encoding="utf-8")
nums = ("a", "b", "你好")
file.writelines(nums)
tell(), 和 seek()
tell()
返回文件指针在当前文件中的位置. 返回的值是以字节为单位的.
seek()
设置文件指针的位置
file = open("new.txt", "r+t", encoding="utf-8")
print(file.tell()) # 文件打开之后指针位置默认为 0
print(file.read(1))
print(file.tell())
file.seek(4)
print(file.read(1))
关闭文件
为什么要关闭文件:
打开文件之后总是会占用一定的系统资源, 所以当你对文件操作完毕之后, 应该关闭文件.
写入数据的时候, 并不是立即写入到文件中, 一般先放入到缓冲区. 当关闭文件的时候, 再从缓冲区写入到文件中. (也可以手动调用
flush()方法写入
)
关闭文件调用文件对象的close()
方法即可.
使用 with 方式打开文件
最好到方式是打开文件的时候使用with
关键字, 可以在文件操作完毕之后在合适时间自动关闭文件, 即使发生了异常也能关闭文件.
而且代码要比处理异常的语句少(后面讲异常处理)
with open("new.txt", "r+", encoding="utf-8") as file:
print(file.read())