使用fileinput和
inplace=True修改文件内容:
import fileinputimport sysfor line in fileinput.input("test.txt",inplace=True): # replaces all occurrences of apples in each line with oranges sys.stdout.write(line.replace("apples","oranges"))
输入:
Marry has 10 carrotsBob has 15 applesTom has 4 bananas
输出:
Marry has 10 carrotsBob has 15 orangesTom has 4 bananas
使用re避免匹配子字符串:
import fileinputimport sysimport re# use word boundaries so we only match "apples" r = re.compile(r"bapplesb")for line in fileinput.input("test.txt",inplace=True): # will write the line as is or replace apples with oranges and write sys.stdout.write(r.sub("oranges",line))
删除所有遗留词:
import fileinputimport sysfor line in fileinput.input("test.txt",inplace=True): # split on the last whitespace and write everything up to that sys.stdout.write("{}n".format(line.rsplit(None, 1)[0]))
输出:
Marry has 10Bob has 15Tom has 4
您还可以使用tempfile.NamedTemporaryFile使用以上任何逻辑将更新后的行写入,然后使用shutil.move替换原始文件:
from tempfile import NamedTemporaryFilefrom shutil import movewith open("test.txt") as f, NamedTemporaryFile("w",dir=".", delete=False) as temp: for line in f: temp.write("{}n".format(line.rsplit(None, 1)[0]))# replace original file with updated contentmove(temp.name,"test.txt")
您需要通过
dir=".",
delete=False因此当我们退出with时,文件文件不会被删除,我们可以使用
.name属性访问该文件以传递给shutil。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)