文件读写
我们用windows的读写文本内容,首先要打开txt文件。在python中也需要打开文件,使用的open
函数打开文件,并且创建file对象保存在内存中。open函数,第二个参数来指定模式。
"r"
模式下,文件只能被读取,不能写入内容。
# 第一种 "r"只读模式
file = open("source/python_io.txt","r")
"w"
模式下,文件内容会被清空,相当于创建一个新文件,可以向文件中写入但不能读取文件内容。(不建议使用)
# 第二种 "w"写模式
file = open("source/python_io.txt","w")
"a"
模式下,文件内容不会被清空,并且可以往文件最后追加内容,但是不能读取内容。
# 第三种 "a"追加模式
file = open("source/python_io.txt","a")
上面三种只能进行单种操作,接下来介绍既能读,又能写的模式。
以下三种模式,文件能读,也能写。所有的写入,都是在文件末尾进行添加,即使移动光标,也不能在文件中间加入数据。
# 第一种 "r+"读写模式
file = open("source/python_io.txt","r+")
# 第二种 "w+"写读模式
file = open("source/python_io.txt","w+")
# 第三种 "a+"追加读取模式,加上"+"追加模式便可以读取
file = open("source/python_io.txt","a+")
还有一种二进制读写
# "rb"二进制读取模式
file = open("source/python_io.txt","rb")
# "wb"二进制写入模式
file = open("source/python_io.txt","wb")
# 在写入模式中,要先将字符串转成二进制
file.write("哈哈哈".encode())
二进制读写用途
- 在python3.0中,网络传输只能用二进制
- 打开二进制文件
file对象常用方法
file.tell() # 获取光标所在位置 ,按字符计数
file.seek(0)# 返回光标位置,0 返回到最开始的地方
file.seekable() # 判断文件是否可以移动光标
print(file.encoding) # 返回文件编码
print(file.flush()) # 文件写入内存的的数据,同步到硬盘上
file.truncate() # 清空文件,指定数之后 清空
小实验
实现类似linux上的进度条
import sys,time
# 打印20个"#"
for i in range(20):
sys.stdout.write("#") #stdout是标准终端输入,例如屏幕。
sys.stdout.flush() # 将写入内存"#",刷新到屏幕上
time.sleep(0.1) # 暂停时间
在没有flush()这个函数时,会将20个”#”全部打印完,在输入到屏幕上。
文件修改
文件修改,同时打开两个文件,一个只读,一个写,边读边写,把满足条件的地方,替换。最后输入到一个新的文件中。即可对文件修改
f = open("source/python_io.txt", "r", encoding="utf-8")
fn = open("source/python.bak", "w")
for line in f:
if "Persons" in line:
line = line.replace("Persons", "Persons_table")
fn.write(line)
f.close()
fn.close()