![](/img/trans.png)
[英]how to print a specific line of a csv file in python based on user input?
[英]python how to return a row from csv file based on user input?
**我需要一些帮助从csv文件返回一行。我的问题是即时通讯使用姓氏或学生ID的输入,我想以此为基础返回一行。我想出了如何获取总记录我只是需要一些帮助来显示行。 如果有人可以提供正确的方向,那将很有帮助。**
for searchingByName or Id //logic
Example File:
Fname LastName StudentId
john jones 100
billy bob 101
您可以使用熊猫加载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
示例文件:
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")
要将CSV文档转换为Python而不使用外部库,可以使用str.split()
。 sep
参数是您指定分隔符的位置。 希望您现在已经学会了如何使用列表。 如果您的作业没有明确禁止您使用熊猫,那么您绝对应该使用熊猫。
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)元素进行搜索。
您可以使用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
正如问题中提到的,searchbyname或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()))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.