栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python 文件的读写详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python 文件的读写详解

一、文件对象常用的方法
序号常用方法描述
1file.close()关闭文件。关闭后文件不能再进行读写操作。
2file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。
3file.readline([size])读取整行,包括 “n” 字符。
4file.readlines([sizeint])读取所有行并返回列表 ,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
5file.tell()返回文件当前位置。
6file.seek(offset[, from])设置文件当前位置
7file.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*

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/503616.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号