如何输出列中值等于标准inpu中指定值的CSV文件行

2024-10-05 14:30:08 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的HW,我需要输出其值等于CSV文件指定列中值的行。即使没有行,标题也需要按原样输出。 列号在标准输入的第一行指定,其值在标准输入的第二行指定。输入的示例:

2
ACampus
Name,Campus,LabName
Yuzu Mori,ACampus,Laboratory of Omics
Yuki Toi,BCampus,Laboratory of RNA Function
Yo Aa,CCampus,Laboratory of Viral Infectious Diseases 
Yu Ya,ACampus,Laboratory of Functional Genetics
Su Yo,BCampus,Laboratory of Cellular Function

输出示例:

Name,Campus,LabName
Yuzu Mori,ACampus,Laboratory of Omics
Yu Ya,ACampus,Laboratory of Functional Genetics

我试着那样解决这个问题

#!usr/bin/env python3

import sys
import csv

data = sys.stdin.readlines()

column_to_be_matched = int(data.pop(0))
word_to_be_matched = data.pop(0)

col_headers = data.pop(0)

print(col_headers)

for row in csv.reader(data):
    if row[column_to_be_matched] == word_to_be_matched: 
       print(row)

该程序打印列标题,但不打印包含所需值的行。我还可以如何访问通过标准输入指定的行中的值


Tags: oftoname标题示例data标准be
1条回答
网友
1楼 · 发布于 2024-10-05 14:30:08

改变你的“如果”条件。有两个原因:1)python以零索引开始,因此第2列表示第[1]2)行readlines()上有换行符(\n),因此必须删除它们

Old: if row[column_to_be_matched] == word_to_be_matched: 
New: if row[column_to_be_matched-1] == word_to_be_matched.rstrip('\n'): 

样本输出:

     Name,Campus,LabName

    ['Yuzu Mori', 'ACampus', 'Laboratory of Omics']
    ['Yu Ya', 'ACampus', 'Laboratory of Functional Genetics']

相关问题 更多 >