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()
我不完全确定为什么文本没有写入文件。帮助
答案 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。