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