我正在打开一个文件,如果满足特定条件,则打开另一个文件并将记录从第一个文件传输到第二个文件,然后从第一个文件中删除它们。下面的代码有效,但 f.truncate()
行除外,它导致了这篇文章标题中的错误。谁能告诉我需要修改什么才能使这项工作正常进行?
f = open(filename,"r")
d = f.readlines()
f.seek(0)
for i in d:
e = i.split(',')
if len(e) > 28:
with open(filename2, "a") as text_file:
text_file.write(i.encode('cp1252'))
text_file.close
f.truncate()
f.close()
最佳答案
您必须以 "r+"
打开第一个文件才能读写,如下所示:
f = open(filename,"r+")
for line in f:
e = line.split(',')
if len(e) > 28:
with open(filename2, "a") as text_file:
text_file.write(line.encode('cp1252'))
f.seek(0)
f.truncate()
f.close()
我还提高了代码的效率,因为它应该遍历行而不是将它们复制到一边。一种更有效的方法是:
with open(filename,"r+") as file1, open(filename2, "a") as file2:
for line in f:
if line.count(',') > 27:
file2.write(line.encode('cp1252'))
file1.truncate(0)
这样您就不会在每次迭代时都重新打开文件,并且由于您没有使用拆分值,您可以只计算逗号 (,
) 并与 27 而不是 28 进行比较。
仅删除复制的行
如果您只想删除复制的行而不清空文件,除了将整个文件复制到内存或使用tempfile 之外别无他法。 .
复制到内存的方法是这样的:
with open(filename,"r+") as file1, open(filename2, "a") as file2:
file_lines = file1.readlines()
file1.seek(0)
file1.truncate()
for line in file_lines:
if line.count(',') > 27:
file2.write(line.encode('cp1252'))
else:
file1.write(line)
如果您使用的是 Python 3.X,请确保指定编码。
关于python - IO错误 : File not open for writing - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103469/