文件读写

简单读写

  • 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 关闭文件,防止内存占用
最后修改日期:2020年9月15日

作者

留言

撰写回覆或留言

发布留言必须填写的电子邮件地址不会公开。