一、文件对象常用的方法
序号 | 常用方法 | 描述 |
---|---|---|
1 | file.close() | 关闭文件。关闭后文件不能再进行读写操作。 |
2 | file.read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
3 | file.readline([size]) | 读取整行,包括 “\n” 字符。 |
4 | file.readlines([sizeint]) | 读取所有行并返回列表 ,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。 |
5 | file.tell() | 返回文件当前位置。 |
6 | file.seek(offset[, from]) | 设置文件当前位置 |
7 | file.write(str) | 将字符串写入文件,返回的是写入的字符长度。 |
二、打开文件的不同模式
模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
---|---|---|---|
r | 只能读 | 报错 | - |
r+ | 可读可写 | 报错 | 是 |
w | 只能写 | 创建 | 是 |
w+ | 可读可写 | 创建 | 是 |
a | 只能写 | 创建 | 否,追加写 |
a+ | 可读可写 | 创建 | 否,追加写 |
三、打开文件的两种方法
第一种方法:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
注明:文件必须以file.close()
结尾。
第二种方法:
with open ( ) as f:
注明:文件不需再执行file.close()
,写入文件可以以打印的形式输入。
例子:
with open ('test.txt', 'w') as f:
print('Hello world!', file = f)
四、文件读取方法例子
文件读取方法:
file.read([size])
、file.readline([size])
、file.readlines([sizeint])
(以只读模式'r'
,文件中字符以HelloWorld
为例)
1、file.read([size])
,若未给参数,则输出文件中所有字符,输出形式跟在.txt
中一样,如下述代码1
。
# 代码 1
with open ('test.txt','r',encoding = "UTF-8") as f:
print('输出的字符是:',f.read())
# 输出结果
输出的字符是: HelloWorld
如果要输出指定数量的字符,比如我只想输出
Hello
,Hello
有五个字符,代码则为file.read(5)
,如下述代码2
。
# 代码 2
with open ('test.txt','r',encoding = "UTF-8") as f:
print('输出的字符是:',f.read(5))
# 输出结果
输出的字符是: Hello
此时如果再次执行
file.read()
,则会输出剩下的World!
,但再次执行file.read()
会发现什么也没有输出。如下述代码3。
# 代码 3
with open ('test.txt','r',encoding = "UTF-8") as f:
print(f.read(5))
print(f.read())
print(f.read())
# 输出结果
读取的字符是: Hello
再次读取的字符是: World
第三次读取的字符是:
想要搞清上述,则先要明确文件定位。与定位相关的方法有:
file.tell()
、file.seek(offset[, from]
。
tell()
方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。
seek(offset [,from])
方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。
如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
# 代码 4
with open ('test.txt','r',encoding = "UTF-8") as f:
print('读取的字符是:',f.read(5))
# 查找当前位置
print('当前文件位置:', f.tell())
# 把指针再次重新定位到文件开头
f.seek(0,0)
print('重新读取的字符是:',f.read())
# 输出结果
读取的字符是: Hello
当前文件位置: 5
重新读取的字符是: HelloWorld
2、
file.readline([size])
,每次输出一行。由于readline()
函数在读取文件中一行的内容时,会读取最后的换行符\n
,再加上print()
函数输出内容时默认会换行,所以输出结果中会看到多出了一个空行。
3、
file.readlines([sizeint])
,如果未给参数,则以列表的形式输出所有行。如果参数0≤x≤某行的字符数,则输出该行;同理,输出下一行。
五、文件读取模式例子
文件读取模式:
r
、r+
、w
、w+
、a
、a+
(文件中字符以HelloWorld
为例)
1、r
:只读模式
只读,不可写。打开时指针自动定位到开头位置。如果以r
模式打开,执行写操作,会提示io.UnsupportedOperation: not writable
;
2、w
:只写模式
只写,不可读。打开时自动清空原文档。如果以w
模式打开执行读操作,会提示io.UnsupportedOperation: not readable
;
3、a
:追加模式
只写,不可读。打开时不清空原文档,指针自动定位到文档末尾。如果以a
模式打开执行读操作,会提示io.UnsupportedOperation: not readable
;
4、r+
:读写模式
先读后写。打开文档时不清空原内容,指针定位正在开始位置。读完后指针会移到文档末尾,所以写的时候是追加在文档最后的。不会覆盖原内容。
如果以r+
模式打开,但是先写后读,那么写入的内容会覆盖原内容,读取时从写结束位置开始读。如果原文档内容小于新写入的,那么全部被覆盖,读到的为空。如果原文档内容大于新写入的,那么读到的内容为原文档剩下的内容。
5、w+
:写读模式
先写后读。打开文档即清空原内容,从文档开头写起,写完后指针自动移到文档末尾,此时进行读取,内容为空。需要将指针移到首位,f.seek(0)。
如果以w+
模式打开,先进行读操作,读到的内容也是为空,因为打开即被清空了。
6、a+
:追加写读模式
先写后读。追加在原文档末尾,不会清空原内容,写完后指针移到文档末尾,此时进行读取,内容为空。需要将指针移到首位,f.seek(0)。但是即使把指针移到原文档首位,想写入,指针也会自动移到原文档末尾。如代码5
如果以a+
模式打开,先进行读操作,读到的内容也是为空,因为打开即把指针定位在文档末尾。
# 代码 5
with open ('test.txt','a+',encoding = "UTF-8") as f:
# 将指针移至文档首位
f.seek(0)
f.write('你好世界')
f.seek(0)
print(f.read())
# 结果
HelloWorld你好世界
参考链接:
1、https://www.runoob.com/python/python-files-io.html
2、https://blog.csdn.net/sinat_41774836/article/details/111290413?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1*