当单词包含在另一列中时,从一列打印

时间:2019-04-27 11:45:02

标签: python

我有一个包含3列的文本文件:名称,年龄和语言。我要打印语言列为“ fr”的所有名称。

例如:文本文件包含制表符分隔符。

Name    Age    Language
Chris    23       fr
Joe      45       de
Henri    32       eng
Samuel   65       fr

所需的输出:

Chris, Samuel

这是我的代码:

import csv
with open('people.txt', 'r') as file:
    names = [cols[0] for cols in csv.reader(file, delimiter="\t")]
    lang = [cols[2] for cols in csv.reader(file, delimiter="\t")]
    for i,row in lang:
        if "fr" in row:
            print(names[i])

2 个答案:

答案 0 :(得分:1)

这应该有效。请注意,您只需要使用csv.reader打开一次csv文件,然后遍历所有行,如果第三行是fr,则将第一行的值附加到列表中

import csv

names = []
with open('graph.csv', 'r') as file:
    reader = csv.reader(file, delimiter="\t")
    next(reader)
    #Iterate through all rows in csv
    for row in reader:
        #If the third element is fr
        if row[2] == 'fr':
            #Append name to names list
            names.append(row[0])

print(names)

输出将为

['Chris', 'Samuel']

答案 1 :(得分:0)

如果可以使用外部模块,我将使用numpy通过以下方式解决此任务:

import numpy as np
data = np.loadtxt('data.csv',str,delimiter='\t')
names = list(data[data[:,2]=='fr'][:,0])
print(names) #prints ['Chris', 'Samuel']

我使用numpy.loadtxt来获取str的数组,通知它文件用制表符(\t分隔,然后得到行,其中第2列(从零开始计数)为fr,然后在这些行的第0列中获取值,即名称。