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

2024-05-16 12:19:15 发布

您现在位置: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])

Tags: csvin语言langfornamesfrreader
2条回答

这应该行得通。请注意,您只需要使用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']

如果可以使用外部模块,我将使用以下方法处理此任务:

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列获取值,即名称

相关问题 更多 >