【问题标题】:Python: Can you extend an array on each iteration using glob (or similar) to read in files from a directoryPython:您能否在每次迭代时使用 glob(或类似方法)扩展数组以从目录中读取文件
【发布时间】:2016-09-24 19:59:29
【问题描述】:

有没有办法使用glob 扩展一个数组,该数组在for-loop 和with 命令组合的每次迭代中存储来自文件的数据。目前,我有类似的东西

import glob
from myfnc import func


for filename in glob.glob('*.dta'):
    with open(filename,'rb') as thefile:

        fileHead, data = func(thefile)

其中func 在另一个脚本myfnc 中定义。这样做是在目录中的每次迭代中,将来自每个文件的数据存储在 fileHeaddata(作为数组)中,擦除前一次迭代中的任何内容。我需要的是在每次传递时扩展每个数组的东西。有没有很好的方法来做到这一点?它不需要是带有组合的 for 循环。这就是我从目录中读取所有文件的方式。

我想事先初始化数组,然后在一次完成with 之后尝试扩展它们,但它给了我extend 命令的某种错误。出现错误后,代码如下所示

import glob
from myfnc import func

fileHead, data = [0]*2


for filename in glob.glob('*.dta'):
    with open(filename,'rb') as thefile:

        fileHeadExtend, dataExtend = func(thefile)

    fileHead.extend(fileHeadExtend)
    data.extend(dataExtend)

所以,它的问题是 fileHeaddata 都被初始化但作为 int 的。但是,我不想将数组初始化为这么多的零。一开始不应该有任何任意值。所以,这就是问题所在。

【问题讨论】:

  • 将 Python 错误消息添加到您的问题中。
  • AttributeError: 'int' object has no attribute 'extend'
  • 现在你需要弄清楚哪个变量是int
  • 在问题中发布整个错误消息,同时添加回溯!
  • 虽然看起来有点明显...fileHead, data = [0]*2 fileHeaddata 都设置为整数0,然后您尝试扩展它们...它们都是0,你怎么扩展0?!?

标签: arrays file python-3.x glob with-statement


【解决方案1】:

你想要:

import glob
from myfnc import func

fileHead = list()
data = list()

for filename in glob.glob('*.dta'):
    with open(filename,'rb') as thefile:
        fileHeadExtend, dataExtend = func(thefile)
    fileHead.extend(fileHeadExtend)
    data.extend(dataExtend)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    相关资源
    最近更新 更多