文件读写
简单读写
- python常使用open函数对文件进行读写,返回一个文件操作对象
- open函数用于打开文件,write方法写入文件对象,close关闭文件对象。
- 使用方法1
# 写一个空白文件并且保存
f = open('001.txt', 'wt')
f.write('hehe') # 写入内容
f.close() # 关闭文件
# 写完后,你的路径下会多一个001.txt文件
- 通常来说,用Python打开文件后需要关闭该文件,否则容易引起内存泄露
-
为了防止忘记关文件,Python可以使用with open() as xx的方法读写文件。
-
使用方法2
# 写一个空白文件并且保存
with open('002.txt', 'wt') as f:
f.write('hehe') # 写入内容
# 这里不需要写f.close(),因为文件会自动关闭。
常用读写模式
- open函数中共有两个关键参数,还有一个可选参数:编码方式(文本模式下默认utf-8)
-
关键参数分别为读写的文件名和读写模式
-
读写模式由两部分构成,一:读取方式;二:读取类型
读写方式 | 英文全称 | 使用结果 |
---|---|---|
w | write | 覆盖写入,即不考虑原来文件是否存在,也不考虑文件是否存在内容,均对其覆盖重建文件。 |
r | read | 读取文件,读取的文件必须存在,如果不存在会保存。 |
a | append | 追加写入,即在末尾添加新内容。如果不存在该文件,则自动创建新文件。 |
读取类型 | 英文全称 | 使用结果 |
---|---|---|
t | text | 按文本类型对文件进行操作,t可以省略。txt,json,xml,html都可以看成是文本。 |
b | binaray | 按二进制进行操作。一般来说,像图片,音乐,视频都是用二进制进行操作。 |
+
号可以用来对文件进行读写,如果是w+
、r+
则为头写入,即覆盖写入,a+
则为末尾追加写入。- 所有模式大全
模式 | 描述 |
---|---|
r | 只读文本模式打开,需要文件存在。等同于rt。 |
rb | 只读二进制模式打开,需要文件存在。 |
r+ | 读写文本模式打开,如果是写入则会覆盖源文件。 |
rb+ | 读写二进制模式打开,如果是写入则会覆盖。 |
w | 写入文本模式打开,如果不存在则创建新文件。如果存在则覆盖源文件内容。 |
w+ | 读写文本模式打开,比w多了一个读取功能。 |
wb | 写入二进制文件。 |
wb+ | 读写二进制文件 |
a | 追加写入文本模式 |
ab | 追加写入二进制模式 |
a+ | 追加写入+读取文本模式 |
ab+ | 追加写入+读取二进制模式 |
- 读写文本模式对比(二进制模式同上)
功能 | r | r+ | w | w+ | a | a+ |
---|---|---|---|---|---|---|
读 | * | * | * | * | ||
写 | * | * | * | |||
创建 | * | * | * | * | ||
覆盖 | * | * | ||||
从开始读写 | * | * | * | * | ||
从结尾读写 | * | * |
- 总结就是:
+
可以读取写入- r只能读,w只能覆盖写,a是追加写。
- r+不能打开不存在的文件,w+和a+可以。
- r+和w+都是从头开始读取写入,a+是从上次结尾处读取写入。
文件读取
- 文件读取必须保证文件已经打开,常使用read方法进行读取。
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
str1 = f.read() # 可以在括号里面输入数字,表示读取多少个字符,
# 不输入默认读取所有字符
print(str1)
"""
# 输出结果
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
- 也可以使用readline函数读取单行
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
str1 = f.readline() # 第一次读取第一行
str2 = f.readline() # 第二次读取第二行
print(str1, str2)
f.close()
"""
# 输出结果
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
- 也可以使用readlines一次性读取所有行,读取结果是一个列表。
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
list1 = f.readlines()
print(list1)
f.close()
"""
# 输出结果
['床前明月光,疑是地上霜。\n', '举头望明月,低头思故乡。']
"""
- tell方法获取读取的指针所在位置。
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rt')
print('文件操作前指针位置', f.tell(), '\n')
str1 = f.readline()
print('读取一行后的指针位置', f.tell(), '\n')
str2 = f.readline()
print('读取所有内容后的指针位置', f.tell(), '\n')
print(str1, str2)
"""
# 输出结果
文件操作前指针位置 0
读取一行后的指针位置 37
读取所有内容后的指针位置 73
xulieh
床前明月光,疑是地上霜。
举头望明月,低头思故乡。
"""
-
seek方法可以让读取写入的指针进行跳转。
-
使用方法:f.seek(x, mode)
- mode共有三种,0:代表从起始位置开始算,1:代表从当前位置往后移动,2代表从结尾的位置往前移动,表示导入第x个位置。
- x代表移动距离,如果mode=2,那么x必须为负数,代表倒数第几个字符。
# 自己创建一个“静夜思.txt”,将诗的内容复制进去
# 打开静夜思.txt,读取该文件
f = open('静夜思.txt', 'rb') # 以二进制格式打开,防止可能出现的中文报错
print('当前指针位置', f.tell())
f.seek(6, 0) # 从头开始计算,把指针移动到第4个字符上
str1 = f.read(1)
print('当前指针位置', f.tell())
print(str1) # 打印当前指针指向的字符
f.seek(4, 1) # 从当前位置往后移动2个
str2 = f.read(1)
print('当前指针位置', f.tell())
print(str2)
f.seek(-2, 2) # 跳转到倒数第2个字符
str3 = f.read(1)
print('当前指针位置', f.tell())
print(str3)
f.close()
"""
# 输出结果
当前指针位置 0
当前指针位置 7
b'\xe6'
当前指针位置 12
b'\x88'
当前指针位置 72
b'\x80'
"""
总结
- 文件读写常用方法总结
常用方法 | 功能描述 |
---|---|
open | 打开文件,是读写文件的前提 |
write | 写入内容到文件,需要有写入权限 |
read | 读取文件内容,默认读取所有内容,返回字符串 |
readline | 读取单行内容,返回字符串 |
readlines | 读取所有行内容,返回列表 |
tell | 给出当前指针位置 |
seek | 跳转指针位置 |
close | 关闭文件,防止内存占用 |
留言