根据用户输入的标准打印.csv中的行

时间:2018-06-03 00:09:19

标签: python python-3.x

我是python的新手,正在寻找我正在处理的任务的指导。

我正在导入一个类似下面列表的csv文件。

invoice_id,customer_first_name,customer_last_name,part_number,quantity,total

18031,Hank,Scorpio,367,1,2.63
54886,Max,Power,171,3,50.79
19714,Jonathan,Frink,179,2,7.93
19714,Jonathan,Frink,378,2,32.34
22268,Gil,Gunderson,165,2,47.15
87681,Lionel,Hutz,218,1,50.83
84508,Lurleen,Lumpkin,257,1,81.95
34018,Lionel,Hutz,112,3,88.88
34018,Lionel,Hutz,386,3,86.04
34018,Lionel,Hutz,216,1,53.54
66648,Patty,Bouvier,203,3,70.47

我只想根据用户输入的标准打印每一行。例如,如果用户输入lname然后输入Hutz,则将打印出以下内容。

87681,Lionel,Hutz,218,1,50.83
34018,Lionel,Hutz,112,3,88.88
34018,Lionel,Hutz,386,3,86.04
34018,Lionel,Hutz,216,1,53.54
4 records found.

这就是我到目前为止......

salesdatafile= None
while True:
    salesdatafilename=input("Enter the name of the file:")
    try:
        salesdata= open(salesdatafilename, 'r')
        break
    except FileNotFoundError:
        print("{0} was not found".format ( salesdatafilename ))

search=input("Do you want to search by invoice id or lname? Please type id or lname: ")
idsearch=salesdata.readline() 

if search== 'id':
    idnumber=print(int(input('Please enter Id to search: ')))
    while idsearch != '':
        if idsearch== idnumber:
            print(idsearch)

else:
    lname=print(input('Please enter your last name: '))
    while idsearch != '':
        if idsearch== lname:
            print(idsearch)

所有打印出来的都是用户输入的lname或id。

3 个答案:

答案 0 :(得分:2)

Python内置了一个你应该使用的csv模块。查看以下示例代码:

import csv
salesdatafilename = r"path/to/file.txt"
data = csv.reader(open(salesdatafilename))
last_name_to_look_for = "Lionel"
for invoice_id, customer_first_name, customer_last_name, part_number, quantity, total in data:
     if customer_last_name == last_name_to_look_for:
        print(invoice_id, customer_first_name, customer_last_name, part_number, quantity, total)

答案 1 :(得分:0)

在您的代码中,您将整行与idnumber或lname进行比较。相反,你可能想尝试像

这样的东西
if lname in idsearch:
    <do something>

这将检查lname是否在某处的行中。

答案 2 :(得分:0)

为了性能,我将使用生成器来读取行,这样我的程序不会崩溃,因为这是一个更大的文件。所以我将使用生成器函数生成该文件中的每一行。由于生成器返回迭代器,然后我将迭代并过滤不包含我的搜索值的每一行,并仅返回包含我的搜索值的那些行。