python 文件的的读写
时间:2023-3-1 22:23 作者:wen 分类: Python
打开文件使用 open函数, 可以打开一个已经存在的文件, 或者出具一个新文件
语法: open(文件名称, 打开模式)
字符 | 意义 |
---|---|
'r' |
读取(默认) |
'w' |
写入,并先截断文件 |
'x' |
排它性创建,如果文件已存在则失败 |
'a' |
写入,如果文件存在则在末尾追加 |
'b' |
二进制模式 |
't' |
文本模式(默认) |
'+' |
打开用于更新(读取与写入) |
默认模式为 'r' (打开用于读取文本,与 'rt' 同义)。 模式 'w+' 与 'w+b' 将打开文件并清空内容。 模式 'r+' 与 'r+b' 将打开文件并不清空内容。
# 文件操作
# 默认编码GBK
fp = open('test.txt', 'w+', encoding='utf-8') # 指定编码
# 开始操作 读/写操作
fp.write('飞流直下三千尺疑是银河落九天')
fp.close() # 关闭文件, 释放资源
# 二进制方式写入
fp = open('test1.txt', 'wb')
fp.write('床前明月光,疑似地上霜\n'.encode('utf-8'))
fp.close()
# 文件追加
fp = open('test1.txt', 'a', encoding='utf-8')
fp.write('举头望明月,低头思故乡\n')
fp.write('诗人:李白\n')
fp.close()
# 文件的读
fp = open('test1.txt', 'r', encoding='utf-8')
# print(fp.read()) # 把文件读成字符串
# print(fp.readline()) # 读一行
# print(fp.readline())
# print(fp.readline())
print(fp.readlines()) # 读成列表
# ['床前明月光,疑似地上霜\n', '举头望明月,低头思故乡\n', '诗人:李白\n']
fp.close()
# 二进制读
fp = open('test1.txt', 'rb')
data = fp.read()
print(data.decode('utf-8'))
fp.close()
# with 上下文管理
# with 语句, 不管在处理文件过程中是否发生异常, 都能保证 with 语句执行完毕后已经关闭打开的文件句柄.
with open('test1.txt', 'r', encoding='utf-8') as fp:
fp.read()
pass
# 文件备份
def copy_file():
# 接受用户输入文件名
old_file = input('输入文件名: ')
file_list = old_file.split('.')
# 构造新的文件名.加上备份的后缀
new_file = file_list[0] + "_备份." + file_list[1]
old_f = open(old_file, 'r', encoding='utf-8') # 已读的方式打开文件
new_f = open(new_file, 'w', encoding='utf-8') # 已读的方式打开文件, 不存在,就创建
content = old_f.read() # 读取文件内容
new_f.write(content) # 写入内容数据
old_f.close()
new_f.close()
pass
# copy_file()
# 如果文件超大, 一次读取全部内容显然不合适, 备份大文件
def copy_big_file():
# 接受用户输入文件名
old_file = input('输入文件名: ')
file_list = old_file.split('.')
# 构造新的文件名.加上备份的后缀
new_file = file_list[0] + "_备份." + file_list[1]
try:
# 同时打开文件需要备份的文件, 新文件
with open(old_file, 'r', encoding='utf-8') as old_f, open(new_file, 'a', encoding='utf-8') as new_f:
while True:
# 一次读取1024字符
content = old_f.read(1024)
new_f.write(content)
# 当读取的内容字符长度小于1024说明已经读取完毕
if len(content) < 1024:
break
pass
pass
except Exception as e:
print(e)
pass
copy_big_file()
文件定位
tell 返回指针当前所在的位置
# tell 返回指针当前所在的位置
# 对中文来说, gbk 占2个字符, utf8 占3个字符
# truncate 可以对源文件进行截取操作 还行要r+
# with open('test1.txt', 'r+', encoding='utf-8') as f:
# # print(f.read(1))
# # print(f.tell())
# f.truncate(9)
# print(f.read())
# pass
# seek 文件定位
# seek(offset, from) 有2个参数, offset, 偏移量单位字节, 负数是往回偏移, 正数是往前偏移, form位置:0表示文件开头, 1表示当前位置, 2表示文件末尾
f = open('test1.txt', 'rb')
content = f.read(3) # 读取3个位置
print(content.decode('utf-8'))
f.seek(-3, 1) # 在前期位置往回偏移两个字节
print(f.read().decode('utf-8'))