Как искать значение в последовательности в Python? - PullRequest
0 голосов
/ 06 ноября 2018

Я очень новичок в кодировании, поэтому, пожалуйста, потерпите меня. По сути, я пишу программу, которая будет запрашивать либо фамилию, либо идентификационный номер, затем искать слово в файле .csv и возвращать весь столбец, к которому он принадлежит. Ниже приведено то, что я написал, если пользователь выбирает поиск по идентификатору.

method = input("Search by invoice id (id) or customer last name (lname)?: ")
    data = "data.csv"
    dataFile = open(data, "r")
    dataRows = dataFile.readlines()

if method == "id":
    term = input("Enter the id: ")
    for line in dataRows:
        row = line.strip()
        newRow = row.split('\n')
        if term == newRow[0]:
            print(newRow)
        else:
            print("No matches found.")

Это CSV-файл: Here is a photo of the csv file.

Вот как он печатается после readlines ():

['invoice id,first name,last name,part number,quantity,total']
['111,Jim,Morrison,27,1,50.25']
['222,Ray,Manzarek,25,2,64.46']
['333,John,Densmore,16,4,34.34']
['333,Robby,Krieger,32,2,34.34']
['555,Jim,Morrison,12,4,43.34']
['333,Jim,Morrison,35,2,34.76']
['888,John,Densmore,63,2,34.76']
['111,Robby,Krieger,21,1,64.45']
['458,Freddie,Mercury,32,4,45.23']
['111,Freddie,Mercury,21,1,46.2']
['234,Allie,McGuire,43,3,64.45']
['675,Allie,McGuire,32,4,45.23']
['359,Freddie,Mercury,423,2,34.34']

Поскольку идентификатор счета-фактуры является первым столбцом, я подумал, что его можно найти с помощью if term == newRow [0], но это не работает. Какие-нибудь советы? Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2018

Самый простой способ сделать это - использовать модуль csv:

method = input('Search by invoice id (id) or customer last name (lname)?: ')
term = input('Enter the term: ')

found_row = None     # To store the row if a match is found

with open('data.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)

    for row in reader:
        # Compare term with Invoice ID if chosen method is ID
        # else compare with Last Name
        if term == (row['invoice id'] if method == 'id' else row['last name']):
            found_row = row

if found_row:
    print(row)
else:
    print('No match found')

Если вы разрешаете пользователю осуществлять поиск только по идентификатору или фамилии, можно еще больше упростить ввод, попросив ввести 1 для идентификатора и 2 для фамилии. Этот подход негибкий, но преимущество заключается в том, что пользователи реже вводят метод в неправильном случае. Например, вы сравниваете method == 'id', но пользователь может ввести Id или ID. Может сделать вашу жизнь немного проще.

0 голосов
/ 06 ноября 2018

Если вы не хотите использовать модуль csv для этой проблемы, тогда вам следует split вашу строку на ",", а не на "\n":

newRow = row.split(",")

Таким образом, первым элементом newRow будет идентификатор счета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...