[Python] 先读后覆盖写文件

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] 三种文件读取方式:生成器分块/按行/一次读取

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值