def main():
infileName = input("Insert To do list file: ")
outfileName = input("Insert the new to do list: ")
infile = open(infileName, "r")
todolist = infile.readlines()
outfile = open(outfileName, "w")
for i in range(len(todolist)):
print(todolist[i], file = outfile)
infile.close()
outfile.close()
print("New list prints to",outfileName)
main()
我不断收到错误消息print(todolist[i], file = outfile) ValueError: I/O operation on closed file.
请帮忙。
我要做的就是从列为
的文件中获取待办事项列表做hw
丢掉垃圾
淋浴狗
我想要的是
1. do hw
2. throw away trash
3. shower dog
答案 0 :(得分:1)
您有缩进错误:
for i in range(len(todolist)):
print(todolist[i], file = outfile)
infile.close()
outfile.close()
像这样纠正:
for i in range(len(todolist)):
print(todolist[i], file = outfile)
infile.close()
outfile.close()
如果你想在行开头添加数字,你应该这样做:
for i in range(len(todolist)):
outfile.write("{0}. {1}".format(str(i), todolist[i]))
答案 1 :(得分:0)
劳伦斯在答案中已经确定了你的代码的问题;你正在关闭循环中的文件,这意味着在你写完第一行后文件被关闭了。但是,实际上有一种比手动关闭文件更好的方法。
通常,当您打开需要处理的资源时,您应该使用with
块:
with open(infileName, "r") as infile, open(outfileName, "w") as outfile:
todolist = infile.readlines()
for i in range(len(todolist)):
print(todolist[i], file = outfile)
print("New list prints to",outfileName)
这样,一旦你在with块之外,文件就会被自动处理。
答案 2 :(得分:0)
您正在写入已关闭的文件。在for循环中,使用outfile.close
关闭文件您可以使用文件上下文管理器和python的枚举功能稍微清理您的代码。以下是您的代码的改进版本:
def main():
infileName = input("Insert To do list file: ")
outfileName = input("Insert the new to do list: ")
with open(infileName, 'r') as infile, \
open(outfileName, 'w') as outfile:
for i, line in enumerate(infile):
print('{}. {}'.format(i, line.rstrip()) , file=outfile)
print("New list prints to",outfileName)
main()
使用上下文管理器 - "打开(...)作为infile"让你忘记关闭文件,因为一旦上下文超出范围,python将关闭它。另请注意,您可以迭代文件对象。当你这样做时,python一次返回一行文件的内容:
for line in open('somefile.txt'):
print line
另一个漂亮的技巧是枚举。这个功能确实:
返回枚举对象。序列必须是一个序列,一个迭代器, 或其他支持迭代的对象。 next()方法 enumerate()返回的迭代器返回一个包含a的元组 count(从默认为0的开始)和从中获得的值 迭代序列。
通过一个例子可以更好地理解:
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]
最后,请注意打印线条时。 Python返回' \ n'当它读取一行时,所以当你打印一行从文件中读取时,你最终会得到一个额外的,通常是意外的空白链接。