Python 尝试创建一个包含从填充文件到输出文件的数字的列表

Python 尝试创建一个包含从填充文件到输出文件的数字的列表,python,list,Python,List,我一直收到一条错误消息,上面写着print(todolist[I],file=outfile)ValueError:I/O操作关闭的文件。请帮助 我所要做的就是从一个列为 do hw 扔掉垃圾 淋浴狗 我想要的是 def main(): infileName = input("Insert To do list file: ") outfileName = input("Insert the new to do list: ") infile = open(infil

我一直收到一条错误消息,上面写着
print(todolist[I],file=outfile)ValueError:I/O操作关闭的文件。
请帮助

我所要做的就是从一个列为

do hw
扔掉垃圾
淋浴狗

我想要的是

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()

您有一个缩进错误:

1. do hw
2. throw away trash
3. shower dog
请这样更正:

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()

劳伦斯在他的回答中用你的代码识别了这个问题;您将在循环中关闭文件,这意味着在写入第一行后,文件将关闭。但是,实际上有一种比手动关闭文件更好的方法

通常,当您打开需要处置的资源时,应使用
with
块:

for i in range(len(todolist)):
        outfile.write("{0}. {1}".format(str(i), todolist[i])) 

这样,一旦您在with块之外,文件就会自动处理。

您正在写入一个关闭的文件。在for循环中,使用outfile.close关闭文件

您可以使用文件上下文管理器和python的枚举函数稍微清理一下代码。以下是您的代码的修订版本:

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)
使用上下文管理器-“open(…)as infle”可以让您忘记关闭文件,因为一旦上下文超出范围,python就会关闭它。还请注意,您可以迭代文件对象。执行此操作时,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()
另一个妙计是枚举。此功能用于:

返回枚举对象。序列必须是序列,迭代器, 或者其他支持迭代的对象。函数的next()方法 枚举()返回的迭代器返回包含 计数(从开始,默认为0)和从 在序列上迭代

通过一个例子可以更好地理解这一点:

for line in open('somefile.txt'):
    print line
最后,打印线条时要小心。Python在读取一行时返回“\n”,因此当您打印从文件读取的一行时,您将得到一个额外的、通常意外的空白链接

>>> 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')]