python如何根据用户输入从csv文件返回一行?

时间:2018-09-12 02:14:59

标签: python

**我需要一些帮助来从csv文件返回一行。我的问题是即时通讯使用姓氏或学生ID的输入,我想以此为基础返回一行。我想出了如何获取总记录,我只需要一些帮助来显示行。如果有人可以提供正确的方向,那就很有帮助。**

for searchingByName or Id //logic

Example File:

Fname LastName StudentId
 john   jones    100
 billy  bob      101

6 个答案:

答案 0 :(得分:0)

您可以使用pandas加载csv文件。

import pandas as pd

df = pd.read_csv("myfile.csv")
user_input = "bob"

for index, row in df.iterrows():
    if row["fname"] == user_input:
        print row

答案 1 :(得分:0)

示例文件:

Fname,LastName,StudentId
john,jones,100
billy,bob,101

我使用逗号分隔单元格,因为它是CSV。

您可以使用python标准库中的csv库。 pandas更方便。 每个line是一个单元格值列表。要在第j列上进行匹配,请使用line[j]

import csv

name_to_search = input("type last name:")

with open("example.csv") as f:
    reader = csv.reader(f)

    # skip the first row, since it is header.
    header = next(reader)
    found = False
    for line in reader:
        if line[1] == name_to_search:
            print(line)
            found = True
            break
    if not found:
        print(name_to_search, "not found")

答案 2 :(得分:0)

要在不使用外部库的情况下将CSV文档转换为Python,可以使用str.split()sep参数是您指定分隔符的位置。希望您现在已经学会了如何使用列表。如果您的作业没有明确禁止您使用熊猫,则应该使用熊猫。

答案 3 :(得分:0)

pandas是一个不错的库,但是如果您想使用纯Python,则可以尝试以下方法:

id = '1'

lines = [line.strip('\n\r').split(',') for line in open("temp.csv")]

print('\t'.join(lines[0]))
for line in lines[1:]:
    if (line[0] == id):
        print('\t'.join(line))

其中“ temp.csv”是您正在读取的csv文件,并且您正在按该行的第一个(第0个)元素进行搜索。

答案 4 :(得分:0)

您可以使用csv.DictReader轻松处理带有标题名称的CSV:

import csv
with open('file.csv', 'r') as f:
    i = input('Input first name: ')
    reader = csv.DictReader(f, delimiter=' ', quoting=csv.QUOTE_MINIMAL, skipinitialspace=True)
    for row in reader:
        if row['Fname'] == i:
            print(' '.join(row.values()))

样本输入和输出:

Input first name: billy
billy bob 101

答案 5 :(得分:0)

如问题中所述,按名称或ID搜索。下面的示例适用于两种用户输入。

import csv
with open('filename.csv', 'r') as stream:
    var = raw_input('Enter first_name or student_id: ')     #taking user input for fname or id
    reader = csv.DictReader(stream, delimiter=' ')
    for row in reader:
        if (row['Fname'] == var) or (row['StudentId'] == int(var)):    #matching with fname or id
            print(' '.join(row.values()))