with open("engl_bible.txt", 'rt') as f:
new_f = f.readlines()
for line in new_f:
if "#" not in line:
f.write(line) #The problem is here, you open in read mode but attempt to write to the file.
f.truncate()
print(f)
important_lines = []
with open("engl_bible.txt", 'rt') as f:
new_f = f.readlines()
for line in new_f:
if "#" not in line:
important_lines.append(line)
f.truncate()
print(f)
with open("engl_bible_cleaned.txt", 'wt+') as f:
for item in important_lines:
f.write(item)
这是我能给你的最简短的答案,似乎是可行的:
您需要以读写模式打开文件,在您读取文件之后,您需要确保您站在文件的开头并截断文件,以确保您不会得到任何尾随文本。你知道吗
然后你继续迭代你读到的所有行,写下你想写的。你知道吗
有更好的方法可以做到这一点,但这将解决你的问题,希望你会学到一些关于文件句柄。你知道吗
你所面临的问题,正如@Austin指出的,你的文件处于读取模式。意思是你不能给它写信。你不能只在写模式下打开它,因为那样会使它无法读取。其中as
r+
为读写同时打开。你知道吗请记住,在文件中读取每个字符后,“标记”位置将向前移动一个字符。所以边读边写有点棘手和危险(但这可能会加快速度)。因此,最简单的方法是读取整个文件,然后跳回到开头,做你想做的工作。你知道吗
其他的方法是读每一行,检查是否需要,如果不需要,跳回一行,替换那一行。但是,您将不得不担心后续数据或数据被部分替换等问题。无论如何,请记住这一点。你知道吗
正如@Swift所指出的,我的一个老习惯是在循环的顶部执行“skip if X”逻辑,这样我就知道块中的所有代码都应该执行,并且它只与任务相关,而不是在随后的一系列if情况下执行。你知道吗
尽管如此,代码也可以缩短为:
它也会这样做。我想既然有人提出这个问题我就把它扔进去。你知道吗
代码中的问题是由于第一行引起的。如注释部分所述,您要求Python以只读模式打开文件。这意味着您可以从中获取数据,但不能对其进行写入。你知道吗
我的建议是以写模式打开它,要么写文本,要么写二进制
wt or wb
如果你真的要写,我也会进一步建议你创建一个新的文件,而不是重写旧文件,然后存档或删除旧文件适用。你知道吗
要执行此操作,请遵循以下代码:
打开文件获取行,然后以写模式重新打开文件,这将截断文件并将所需数据写入其中。你知道吗
相关问题 更多 >
编程相关推荐