我正在尝试将文件名列表或字典打印到文本文件中。它目前只返回列表中的第一项。这些项目是从s3 Aws获取的。我使用的是Python 2.6
for obj in bucket.objects.filter(Prefix=prefix):
s = obj.key
with open('test.txt', 'w') as f:
f.write(s)
无论何时打开文件进行写入,都会删除先前的内容并写入新文本。因此,在这种情况下,您将删除在下一次迭代中写入文件的任何内容。您可以这样做或以“追加”模式打开文件并继续您所写的内容。
f= open("test.txt", "w")
for obj in bucket.objects.filter(Prefix=prefix):
s = obj.key
f.write(s)
f.write('\n)
f.close()
这里的问题是,对于每个项目,您创建一个新文件(如果该文件已存在,您可以删除内容),然后将s
写入其中。
所以你应该在这里交换事物的顺序:
with open('test.txt', 'w') as f: # first open the file
for obj in bucket.objects.filter(Prefix=prefix): # then iterate
f.write(obj.key)
因此我们保持文件句柄处于打开状态,并且每个项目都将被写入。一个潜在的问题是在写入对象的键后不会写新行。我们也可以通过写一个新行来做到这一点:
with open('test.txt', 'w') as f:
for obj in bucket.objects.filter(Prefix=prefix):
f.write(obj.key)
f.write('\n')