以编程方式将列表的内容写入目录

时间:2014-10-09 17:15:00

标签: python file-io

我有一个在for循环中生成的python列表['a','b','c']。我想将列表的每个元素写入一个新文件。

我试过了:

counter = 0
for i in python_list:
    outfile = open('/outdirectory/%s.txt') % str(counter) 
    outfile.write(i)
    outfile.close()
    counter += 1 

我收到错误:

IOError: [Erno 2] No suchfile or directory. 

如何以编程方式在for循环中创建和写入文件?

3 个答案:

答案 0 :(得分:2)

您没有将模式传递给打开,因此它正在尝试以读取模式打开。

outfile = open('/outdirectory/%s.txt' % str(counter), "w") 

试试这个:

out_directory = "/outdirectory"
if not os.path.exists(out_directory):
    os.makedirs(out_directory)

for counter in range(0, len(python_list)):
    file_path = os.path.join(out_directory, "%s.txt" % counter)
    with open(file_path, "w") as outfile:
        outfile.write(python_list[counter])

答案 1 :(得分:2)

一些建议:

  • 使用with语句处理文件 [docs]
  • 使用正确的文件打开模式编写[docs]
  • 您只能在实际存在的目录中创建文件。您的错误消息可能表示对open()的调用失败,可能是因为该目录不存在。要么你有错字,要么你需要先创建目录(例如,如this question)。

示例:

l = ['a', 'b', 'c']
for i, data in enumerate(l):
    fname = 'outdirectory/%d.txt' % i
    with open(fname, 'w') as f:
        f.write(data)

答案 2 :(得分:2)

基本上你收到的消息是因为你试图打开一个名为/outdirectory/%s.txt的文件。 ErlVolton显示的以下错误是您不以书面模式打开文件。另外,您必须检查您的目录是否存在。如果您使用/outdirectory,则表示从文件系统的根目录开始。

三个pythonic附加: - 枚举迭代器,用于自动计算列表中的项目 - with statement autoclose您的文件。 - 格式可以比%东西更清晰

所以代码可以写成以下

for counter,i in enumerate(python_list):
    with open('outdirectory/{}.txt'.format(counter),"w") as outfile:
        outfile.write(i)

PS:下次显示完整的回溯痕迹