【问题标题】:Print an array, dict, list into a text file on Python在 Python 上将数组、字典、列表打印到文本文件中
【发布时间】:2018-06-02 01:34:40
【问题描述】:

我正在尝试将文件名列表或字典打印到文本文件中。它目前只返回列表中的第一项。这些项目是从 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)

【问题讨论】:

  • 所以对于每个项目,您都创建一个 new 文件test.txt 并将该特定对象写入文件?
  • 实际上它正在返回 last 项。
  • 我正在尝试将所有项目返回到列表中。
  • exaclty,我解释了为什么它不适用于您的实现...

标签: python list amazon-web-services amazon-s3 python-2.6


【解决方案1】:

每当您打开一个文件进行写入时,以前的内容都会被删除并写入新的文本。因此,在这种情况下,您将在下一次迭代中擦除您写入文件的任何内容。你可以这样做,或者以“追加”模式打开文件并继续你所写的内容。

f= open("test.txt", "w")
for obj in bucket.objects.filter(Prefix=prefix):
      s = obj.key
      f.write(s)
      f.write('\n)
f.close()

【讨论】:

    【解决方案2】:

    这里的问题是为每个项创建一个文件(如果文件已经存在,可以说删除内容),然后给它写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')

    【讨论】:

    • 你能不能把它弄成格式不行。 12345 而不是 1,2,3,4,5 和/或换行符
    • @user3821872:格式不是什么?第二个实现在键之间写入新行...
    • 非常感谢一大堆
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 2013-11-16
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    • 2019-03-28
    相关资源
    最近更新 更多