打开文件的几种方式
r(只读,文件的描述符在开头)
rb(二进制格式打开,只读,文件的描述符在开头)
r+(读写,文件的描述符在开头)
w(只写,文件的描述符在开头,若文件存在则会覆盖,若不存在就会创建一个)
wb(二进制写入文件,文件的描述符在开头,同前)
w+(读写)
a(打开文件,用于追加内容,文件若存在描述符在末尾)
ab(二进制追加内容)
a+(读写,文件的描述符在末尾)
x(创建一个新文件并打开以写入,若文件已存在则报错)
xb(创建一个新文件并打开以二进制写入)
t(文本模式,默认)
open函数
def open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True):
file # 文件的路径
mode # 以哪种方式打开,默认是r(读写)
buffering # 用来设置缓冲策略的可选整数,通过0来关闭缓冲(只允许在二进制模式下),
# 1来选择行缓冲(只在文本模式下使用),并使用大于1的整数表示固定大小的块缓冲区。
# 若没有参数,则使用默认缓冲区策略.在许多系统上,缓冲区通常是4096或8192字节长
encoding # 用于设置使用哪种编码方式来进行编码或解码
errors # 设置为"ignore"可以忽略错误,"strict"不忽略错误,默认为不忽略错误,最好不要用在二进制模式下
newline # 只适用于文本模式(t)
# 输入模式下:不定义此参数,将会将'\n', '\r', '\r\n',转换为'\n',
closefd # 如果为False,则在关闭文件时,底层文件描述符将保持打开状态。当给定文件名时,这将不起作用,并且在这种情况下必须为True。
读文件
--------- 简单读文件(一次性读取全部) --------
path = "test.txt"
f = open(path, 'r')
f.read()
--------- 读文件部分内容 --------
f.read(10) # 是根据字节来读取的
--------- 读一行数据 --------
f.readline()
--------- 读所有行数据 --------
f.readlines() # 返回一个列表
---------- 修改文件描述符的位置 ---------
f.seek(0) # 根据偏移量进行移动
f.close() # 关闭文件
写文件
path = "test.txt"
f.open(path, 'w')
f.write("123456") # 并不会立即写入文件,要等待文件关闭或者缓冲区满了之后才会存入文件
f.flush() # 立即将缓冲区的数据存入文件
f.close()
其他数据类型的读写set-tuple-dict-list
需要用到python的一个库函数pickle,直接导入即可
# 写入
path = "test.txt"
list1 = [1, 2, 3, 4, [1, 2, 35]]
with open(path, 'wb') as f:
pickle.dump(list1, f)
# 读取
with open(path, 'rb') as f1:
list2 = pickle.load(f1)
print(list2)
这是以二进制方式进行读取的,虽然我们看不懂文件里的内容,但并不影响我们对数据进行读取