我有一个包含数据的文本文件。例如,我想打印出" animal"的所有值。所以当"动物"选择,它将打印出来"猴子","大象"和#34;狗"。它有点工作,但它只打印出第一个值。例如,如果我选择" animal",它只打印出Monkey。
有没有办法让它打印出来?也许有更好的方法来做到这一点?
Data2.txt:
Adidas, shoe
Monkey, animal
Soup, food
Elephant, animal
Dog, animal
Taco, food
file = open('data2.txt')
data = file.readlines
stuffs = []
types = []
for line in data():
line = line.strip()
stuff, type = line.split(', ')
stuffs.append(stuff)
types.append(type)
animals = types.index('animal')
print (stuffs[animals])
答案 0 :(得分:1)
你需要循环遍历类型,因为types.index('animal')只会返回第一个类型。找到索引后,您可以在stuffs中找到相应的索引。试试这个:
text-area
答案 1 :(得分:1)
我认为更好的想法是使用dict:
file = open('data2.txt')
data = file.readlines
categories = {}
for line in data():
line = line.strip()
stuff, type = line.split(', ')
categories.setdefault(type, []).append(stuff)
print (categories['animal'])
答案 2 :(得分:1)
使用collections.defaultdict对类型进行分组,使用csv module来解析文件:
import csv
from collections import defaultdict
with open("test.txt") as f:
# create rows splitting on commas
r = csv.reader(f, skipinitialspace=True)
# create dict to store all the types
d = defaultdict(list)
# v = row[0], k = row[1]
for v,k in r:
d[k].append(v)
输出:
defaultdict(<class 'list'>, {'shoe': ['Adidas'],
'food': ['Soup', 'Taco'],
'animal': ['Monkey', 'Elephant', 'Dog']})
然后只需按键查找:
print(d["animal"])
print(d["shoe"])
['Monkey', 'Elephant']
['Adidas']
除非你真的想要一个列表,否则你不需要调用readlines,你可以迭代文件对象或者只是将它传递给csv模块并迭代读取器对象,如上面的代码所示。
答案 3 :(得分:1)
您填充列表的方式,您有一个动物列表,一个具有相应类型的列表,位于相同位置。使用index
,您只能获得第一场比赛,但您需要全部比赛。
一种方法是使用zip
迭代成对的动物和类型,并打印每种类型正确的动物。
for s, t in zip(stuffs, types):
if t == "animal":
print(s)
或者您可以使用列表理解来收集列表中的所有动物:
>>> [s for s, t in zip(stuffs, types) if t == "animal"]
['Monkey', 'Elephant', 'Dog']
或者,更改存储数据的方式。例如,您可以创建一个开头的对列表,而不是让两个列表具有相应的索引并将这些列表压缩回一对列表:
pairs = []
for line in data():
line = line.strip()
pairs.append(line.split(', '))
print([s for s, t in pairs if t == "animal"])
甚至可以使用字典,将类型映射到填充内容,如其他一些答案所示。
答案 4 :(得分:1)
d = {}
with open('data','r' ) as f:
for line in f:
le, r = line.split(',')
d.setdefault(r.strip(),[]).append(le.strip())
for k,v in d.items():
print(k,v)
shoe ['Adidas']
food ['Soup', 'Taco']
animal ['Monkey', 'Elephant', 'Dog']
答案 5 :(得分:0)
以这种方式使用numpy:
import numpy as np
a = np.loadtxt("myFile")
#Then it's simple!
a[a[:,1] == 'animal'][0]