【问题标题】:iterate one row at a time of a 2D numpy array python一次迭代一行二维numpy数组python
【发布时间】:2020-10-06 02:17:55
【问题描述】:

我有如下所示的数组。

[['dad', 'mom', 'test1.txt']
['brother', 'sister', 'test2.txt']
['uncle', 'aunty', 'test3.txt']
['grandpa', 'grandma', 'test4.txt']]

例如,我想迭代。我从 第一个第一个元素 打开 test1.txt 文件,如果字符串 'dad' 和 'mom' 出现在拆分索引中,则过滤文件并读取并附加年龄.同样对于 text2.txt 文件,如果存在 'brother' 和 'sister' 然后读取并过滤,我希望它在嵌套列表中不一样。

我有类似下面的东西

lst_age=[]
for data in ele_arry:
    file = data[2]
    stg1 = data[1]
    stg2 = data[0]
    files = open(file, 'r').read()
    for line in files:
        formattedline = line.split(' ')
        if formattedline[1] == stg1 and formattedline[2] == stg2:
            lst_age.append(formattedline[3])

逐行分割后的文本文件如下:

['1','dad', 'mom', '27']
['2','dad', 'mom', '34']
['3','daughter', 'mom', '42']
['4','dad', 'son', '21']
['5','daughter', 'son', '22']

我需要的输出是 lst_age 变量

['27', '34'] #for file text1.txt
['28', '43' ] #for file text2.txt
#similarly for all the 4 files 

但现在我将所有文件中的年龄元素合并为一个。

['27', '34','28', '43'] 

这没有提供上述所需的输出。有人可以帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • 您确定错误与此代码有关吗? “事件循环已在运行”听起来像是来自asyncio 包的实际错误消息“此事件循环已在运行”,据我所知,此代码与此无关。也不清楚你在哪里使用 Numpy。
  • 我正在使用 numpy 从 csv_file 获取数组格式。 @Iguananaut

标签: python arrays python-3.x numpy loops


【解决方案1】:

这是因为使用files = open(file, 'r').read() 你会得到一个文件对象而不是一个可迭代的列表。您可以使用 readlines() 返回包含文件行的列表:

ele_arry =[['dad', 'mom', 'C:\\Users\\Miguel\\Desktop\\test1.txt'],
['brother', 'sister', 'C:\\Users\\Miguel\\Desktop\\test2.txt'],
['uncle', 'aunty', 'C:\\Users\\Miguel\\Desktop\\test3.txt'],
['grandpa', 'grandma', 'C:\\Users\\Miguel\\Desktop\\test4.txt']]


lst_age=[]
for data in ele_arry:
    file = data[2]
    stg2 = data[1]
    stg1 = data[0]
    files = open(file, 'r').readlines()
    lst_agefile=[]
    for line in files:
        formattedline = line.split(' ')
        if formattedline[1] == stg1 and formattedline[2] == stg2:
            lst_agefile.append(formattedline[3].replace('\n',''))
    lst_age.append(lst_agefile)
for i in lst_age:
    print(i)

输出:

['27', '34'] 
['28', '43' ]

单行方式:

lst_age=[[line.split(' ')[3].replace('\n','') for line in open(data[2], 'r').readlines() if line.split(' ')[1] == data[0] and line.split(' ')[2] ==  data[1]] for data in ele_arry]

【讨论】:

  • 但列表仍然是所有文本文件数据的组合
  • 好的,我没有看到您对所需输出的编辑。我刚刚编辑了答案以获得预期的输出。
猜你喜欢
  • 2011-12-28
  • 2012-11-06
  • 2023-01-04
  • 2017-12-06
  • 2015-04-04
  • 2018-12-01
  • 1970-01-01
  • 2013-09-13
  • 2019-04-26
相关资源
最近更新 更多