簡體   English   中英

python如何根據用戶輸入從csv文件返回一行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM