如何在Python中编辑文本文件?

时间:2014-12-31 06:39:46

标签: python python-2.7

text = open('samiam.txt', 'r+')
keyword = " i "
keyword2 = "-i-"
replacement = " I "
replacement2 = "-I-"

for line in text:    
    if keyword in line:
        text.write(line.replace(keyword, replacement))
        print line
    elif keyword2 in line:
        text.write(line.replace(keyword2, replacement2))
        print line
    else:
        print line
text.close()

我不完全确定为什么文本没有写入文件。帮助

4 个答案:

答案 0 :(得分:2)

在您的代码中只需替换

for line in text:

for line in text.readlines():

请注意,这里我假设您正在尝试在文件末尾添加输出。读完整个文件后,文件指针位于文件末尾(即使您以r+模式打开文件)。因此,执行写操作实际上会在当前内容之后写入文件的末尾。

您可以通过在不同的行嵌入text.tell()来检查文件指针。

这是另一种方法:

with open("file","r") as file: 
    text=file.readlines() 
i=0 
while i < len(text): 
    if keyword in text[i]: 
        text[i]=text[i].replace(keywork,replacement) 
with open("file","w") as file: 
    file.writelines(text)

答案 1 :(得分:1)

使用fileinput module。 (另见the MOTW site。)

import fileinput
keyword1 = " i "
keyword2 = "-i-"
replacement1 = " I "
replacement2 = "-I-"
for line in fileinput.input('your.file', inplace=True):
    line = line.rstrip()
    if keyword1 in line:
        line = line.replace(keyword1, replacement1)
    elif keyword2 in line:
        line = line.replace(keyword2, replacement2)
    print line

fileinput模块,当您使用inplace选项时,重命名输入文件并将stdout重定向到具有原始文件名的新文件

如果要保留每行右侧的空白,请不要rstrip并使用print line,(请注意最后一个逗号)输出已处理的行。

答案 2 :(得分:0)

最好使用两个描述符 - 一个用于读取,另一个用于写入,用于可读性和单写操作。

text_read = open('samiam.py', 'r').read()
words_replacer_dict = {" i " : " I ", "-i-" : "-I-"}
replaced_text = ""

for line in text_read.split("\n"):
    for word, new_word in words_replacer_dict.items():
        replaced_text += line.replace(word, new_word)

text_read.close()
text_write = open('samiam.py', 'w')
text_write.write(replaced_text)
text_write.close()

如果您在这种情况下对记忆感到困扰,您甚至可以根据计数进行计数和写入。只需使用生成器表达式以读取模式打开文件,并保持引用计数以满足写入操作。 注意:阅读here(不是官方链接),以更好地了解字典方法。

但是,如果您更喜欢使用读写操作,请始终使用搜索操作来到要替换的行,并在完成文件写入后使用flush。但是,您无法通过seek和flush方法替换文件中已存在的行。您只需在文件中添加内容即可。 (例如)

text = open('samiam.py', 'r+')
count = 1
new_text = ""
for line in text:
    new_text += "%d:%s\n" % (count, line)
    count += 1
text.seek(0)
text.truncate()
text.write(new_text)
text.seek(0)
for line in text:
    print line
text.close()

为了更好地阅读为什么无法按照您的意愿阅读和写入文件,请参阅here

答案 3 :(得分:0)

这是因为您正在尝试同时读写。尝试类似:

# Read operation
lines = []
for line in text.readlines():
    if keyword in line:
        lines.append(line.replace(keyword, replacement))
        print line
    elif keyword2 in line:
        lines.append(line.replace(keyword2, replacement2))
        print line
    else:
        lines.append(line)
        print line
text.close()

# Write operation
text = open('dummy.py', 'w+')
text.writelines(lines)
text.close()

加成:

with open('data.txt') as f:
     data = f.read()

更pythonic。