【问题标题】:Iteratively populate array in Python在 Python 中迭代地填充数组
【发布时间】:2015-04-26 13:26:51
【问题描述】:

我在一个目录中有多个文件,我试图从中读取并将每个文件的内容保存到同一个数组中。

getFileNames 返回基目录中的所有文件名,并将它们正确返回并保存到allFiles 数组中。

我尝试了下面的代码,但它只返回第一个文件中的数据。实际上,数组文件只有一项,allFiles[0]

basePath = '/home/resume_examples/'
allFiles = getFileNames(basePath)
for document in allFiles:
    fileTexts = [getFileText(basePath + document)]
print fileTexts

我也试过了,但是数组里还有一项(最后读取的文件的内容)。

basePath = '/home/resume_examples/'
allFiles = getFileNames(basePath)
for document in allFiles:
    fileTexts = []
    fileTexts.append(getFileText(basePath + document))
print fileTexts[2]

我知道我的数组在每次迭代时都会被覆盖,但我不明白为什么即使 append 也不起作用。有人可以解释一下我应该如何在每次调用getFileText 函数时定义/填充我的数组吗?

【问题讨论】:

  • append 在您的第二个示例中不起作用,因为您再次在循环的每次迭代中创建一个新列表...您需要将fileTexts = [] outside(之前)循环,然后在循环中使用append
  • @Anentropic:这似乎更像是一个答案而不是评论,不是吗?
  • 为什么fileTexts[2] 可以包含少于 3 个项目??
  • @chapelo 实际上我的目录中有 24 个文件,所以我只是在测试该数组是否获取了超过 1 个文件的文本。

标签: python arrays python-2.7


【解决方案1】:

每次迭代都将列表重置为[]。只在迭代之前这样做:

fileTexts = []
for document in allFiles:
    fileTexts.append(getFileText(basePath + document))

【讨论】:

  • 天哪,你说的太对了。我忽略了这一点,它是如此简单。
【解决方案2】:

或使用列表推导

file_texts = [getFileText(basePath + document) for document in allFiles]

https://docs.python.org/2/tutorial/datastructures.html#list-comprehensions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-10
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-10
    • 1970-01-01
    相关资源
    最近更新 更多