目录
概述
使用python对文件(文本,二进制文件)进行读,写,对拷操作。
文件的写操作
在进行写入操作时,权限为"w",在文件不存在的情况下,会自动创建。
如果存在文件,则对文件进行覆盖操作。
写入单行
f1 = open("f.txt", "w", encoding="utf-8")
f1.write("I have a dream!")
f1.close()
写入多行
***方式1***
f1 = open("f.txt", "w", encoding="utf-8")
f1.write("aaa \nbbb \nccc \n")
f1.close()
***方式2***
list = ["aaa\n", "bbb\n", "ccc\n"]
f1 = open("f.txt", "w", encoding="utf-8")
f1.writelines(list)
***方式3***
list = ["aaa", "bbb", "ccc"]
f1 = open("f.txt", "w", encoding="utf-8")
f1.write("\n".join(list))
文件的读操作
现有一文件:"f1.txt",内容为
正常读取
***读取操作***
f1 = open("f1.txt", "r", encoding="utf-8")
print(f1.read())
f1.close()
输出为:
I have a dream1!
I have a dream2!
I have a dream3!
读取指定字符数
***读取指定字符***
f1 = open("f1.txt", "r", encoding="utf-8")
print(f1.read(3)) //读取指针后3个字符
print(f1.read(3)) //读取指针后3个字符
f1.close()
***输出为(存在空格)***
I h
ave (从指针位置开始读)
可以看出,存在指针问题,读取过程中指针的定位会移动,并且用于指定字符数。
读取一行readline()
***读取一行***
f1 = open("f1.txt", "r", encoding="utf-8")
print(f1.readline())
print(f1.readline())
f1.close()
***输出为***
I have a dream1!
I have a dream2! (存在指针移动问题)
读取多行readlines()
***读取多行***
f1 = open("f1.txt", "r", encoding="utf-8")
print(f1.readlines())
f1.close()
***输出为(列表形式)***
['I have a dream1!\n', 'I have a dream2!\n', 'I have a dream3!\n']
tell( ) 和seek( ) -获取和指定指针
tell()方法
返回指针当前所在的位置(指针所在位置前面的字节数),例如:
***f1文件内容***
I have a dream1!
//操作
f1 = open("f1.txt", "r", encoding="utf-8")
//使指针移动
print(f1.read(2))
print(f1.read(2))
//获取指针位置
print(f1.tell())
f1.close()
***输出***
I
ha
4
值得注意的是,输出的是字节数,如果使用的字符集是GBK,一个中文等于2个字节,使用的是UTF-8,则一个中文等于3个字节。
seek()方法
seek()方法:指定指针位置,seek( offset [ , whence ] );
参数说明:
offset:
指针向右偏移多少个字节。
whence(可选):
从什么位置开始偏移
0:开始位置,1当前位置(默认),2末尾位置
f1 = open("f1.txt", "r", encoding="utf-8")
//设置指针向后移动2个位置后读取
f1.seek(2)
print(f1.read(2))
//将指针重置为最开头后读取
f1.seek(0, 0)
print(f1.read(2))
//输出当前指针位置
print(f1.tell())
f1.close()
***输出为***
ha
I
2
文件访问模式
可以设置文件操作的权限。
除了如上使用的权限:"r","w"等,还有"a","r+","w+" 等等
文件权限大全
文件对拷操作
两个文件,使用读取和写入进行拷贝操作。
f1 = open("f1.txt", "r", encoding="utf-8")
f2 = open("f_copy", "w", encoding="utf-8")
while True:
source = f1.read()
# 判断f1中是否有数据
if source:
f2.write(source)
else:
break
f1.close()
f2.close()
文件缓冲区
我们在进行文件写入操作时,使用了write()后,并没有立即将数据存入硬盘(文件)中,而是将数据先放到内存中的"缓冲区",等待指令(清空缓冲区指令)再进行下一步操作(存入文件)。
存在缓冲区的数据什么情况才会存入文件呢?
有如下4种情况会"清空"(传入文件)。
1.当缓冲区满后。
2.程序关闭时。
3.文件关闭时,close()操作。
4.手动清空缓存区,方法:flash()。
文件对象(获取文件属性)
可以通过文件对象获取文件的属性和状态。例如:
f1 = open("f1.txt", "r", encoding="utf-8")
print(f1.name) # f1.txt
print(f1.mode) # r
print(f1.encoding) # utf-8
print(f1.readable()) # True 是否可读
print(f1.writable()) # False 是否可写