Jestem nowy w Pythonie i szukam wskazówek dotyczących zadania, nad którym pracuję.

Importuję plik CSV, który wygląda jak poniższa lista.

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

Chcę tylko wydrukować każdą linię, jeśli opiera się wyłączyć kryteria wprowadzone przez użytkownika. Na przykład, jeśli wprowadzono nazwę użytkownika Lname, a następnie wejścia HUTZ, które zostaną wydrukowane.

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.

To jest to, co mam do tej pory ...

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)

Wszystko, co drukuje jego nazwę lub identyfikator wprowadzony przez użytkownika.

2
Lethal_bacon 3 czerwiec 2018, 03:09

3 odpowiedzi

Najlepsza odpowiedź

Python ma moduł CSV wbudowany, że powinieneś wykorzystać. Sprawdź poniższy kod:

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)
2
ThePoetCoder 3 czerwiec 2018, 00:34

W celu uzyskania wydajności użyję generatora do przeczytania linii, aby mój program nie został awarię, to był większy plik. Więc przyniosę każdą linię w tym pliku z funkcją generatora. Ponieważ generatory zwracają Iteratirs, a następnie iteruje i filtruję każdą linię, która nie zawiera mojej wartości wyszukiwania i zwrot tylko tych, które zawierają moją wartość wyszukiwania.

0
basifat 3 czerwiec 2018, 11:52

W swoim kodzie porównujesz całą linię do identyfikacji lub lname. Zamiast tego możesz spróbować czegoś takiego

if lname in idsearch:
    <do something>

Spowoduje to sprawdzenie, czy gdzieś jest lname w linii.

0
Sreya Rajendran 3 czerwiec 2018, 00:25