Python 修改文件

一、有时候我们会遇到在写入文件后,其实内容并未被写到文件里面的问题

#原因是内容先写到缓冲区,缓冲区满时,才写入磁盘

#解决:用f.flush()强制把缓冲区里面的数据写到磁盘上

fw = open('username.txt',w)

fw.write('测试')

fw.flush()

二、修改文件简单直接的方法(replace()),此方法当文件内容较多时,效率不高,会出现内存溢出的情况

1、打开一个文件,获取到文件的内容read方法(返回类型是str)

2、对内容进行修改

3、清空原来的内容truncate方法

4、把新的内容写到文件

f= open('username.txt','a+')
f.seek(0)#a+模式文件指针默认在文件末尾,用seek(0)将文件指针放到开头
all_str = f.read()#返回类型是str,当文件内容较多时,效率不高
new_str = all_str.replace('123456','789012')#替换文件内容
f.seek(0)
f.truncate()#清空文件内容 f.write(new_str)#将修改后的文件内容写入文件 f.close()#关闭文件

修改文件内容中举例:给文件中的用户名前统一加值test_

 f = open('username.txt','a+')
 f.seek(0)
all_str = ''#每次循环的时候把字符串拼接起来,然后最后写入文件
for line in f:#f.readlines()把文件里面所有的东西一次都读出来放到list里面,文件大的话效率不高
     new_line = 'test_' + line
     all_str += new_line
 f.seek(0)
 f.truncate()#清空文件内容
 f.write(all_str)
 f.close()

 三、以上修改文件方法当文件小时用起来是比较方便的,但文件大时效率不高,以下介绍一种效率比较高的方法

1、打开两个文件
2、a文件,一行一行修改
3、写一行写到b文件
4、a.txt a.txt.bak
5、删除a文件,b文件的名字改为a文件名
#f.write()只能写字符串
# f.writelines()循环写入,会帮助咱们循环list写入
import os
with open('words',encoding='utf-8') as fr,open('.words.bak','w',encoding='utf-8') as fw:
    for line in fr:
        new_line = line.replace('测试','test')
        fw.write(new_line)
os.remove('words')#删除文件
os.rename('.words.bak','words')#改名

 

posted @ 2018-04-22 17:34  Lamon  阅读(197)  评论(0编辑  收藏  举报