Python先读后覆盖写文件
只打开一次文件,先把文件内容读取出来,处理之后形成新的数据,重新写入新的数据,完成先读取后覆盖写文件。
比如有一个文件内容如下,需要将内容全转为大写然后覆盖:
Now York is 3 hours ahead of California, but it does not make California slow.
Someone graduated at the age of 22, but waited 5 years before securing a good job.
Someone became a CEO at 25, but died at 50.
While another became a CEO at 50, and lived to 90.
Someone is still single, while someone else got married.
Abselutely everyone in this world works based on the Time Zone.
先读取文件,然后覆盖:
def rewrite_file(file_path):
with open(file_path, mode='r+', encoding='utf-8') as f:
# 先读取文件, 将文件指针指向开始,并使用truncate()清除所有内容
data = f.read()
f.seek(0)
f.truncate()
data = upper_data(data) # 将所有数据转为大写
f.write(data) # 重写数据
# 重读数据
f.seek(0)
print(f.read())
def upper_data(data):
return data.upper()
if __name__ == '__main__':
rewrite_file('zone.txt')
输出如下:
NOW YORK IS 3 HOURS AHEAD OF CALIFORNIA, BUT IT DOES NOT MAKE CALIFORNIA SLOW.
SOMEONE GRADUATED AT THE AGE OF 22, BUT WAITED 5 YEARS BEFORE SECURING A GOOD JOB.
SOMEONE BECAME A CEO AT 25, BUT DIED AT 50.
WHILE ANOTHER BECAME A CEO AT 50, AND LIVED TO 90.
SOMEONE IS STILL SINGLE, WHILE SOMEONE ELSE GOT MARRIED.
ABSELUTELY EVERYONE IN THIS WORLD WORKS BASED ON THE TIME ZONE.
如果文件过大怎么办?
推荐你使用生成器读取文件后写入,可以按行处理或者按块处理,思路是一样的。
如何使用生成器读写文件,参考[Python] 三种文件读取方式:生成器分块/按行/一次读取