Поиск файла CSV и если его нет в файле - PullRequest
0 голосов
/ 04 мая 2018

У меня есть CSV-файл, заполненный информацией о билетах. Я создал небольшой скрипт для ввода номеров билетов, разделенных пробелами, в список, который ищет в CSV-файле каждый билет в списке, и, если он находит билет, он выводит информацию в этой строке.

Моя проблема в том, что если я ищу билет, которого нет в CSV-файле, он просто пропускает его и уходит, но я хотел бы сказать, что этого билета нет в файле. Из того, что я могу сказать, это поиск файла CSV по строке или строке. Если я попробую оператор else, он начнет печатать каждую строку в CSV-файле, если этот билет отсутствует в строке.

Мне нужно иметь возможность вводить несколько номеров билетов и выполнять поиск по Python для каждого из них в отдельности. Если он находит билет в столбце 1, то печатает информацию из этой строки, а если он не находит билет в столбце 1 каких-либо строк, то распечатывает этот билет с последующим «отсутствует в файле».

import csv

file = csv.reader(open('Path To CSV file', "rb"), delimiter=",")
newticket = raw_input('Enter Ticket Numbers:').split()

for line in file:
    for tickets in newticket:
        if tickets == line[1]:
            print(tickets, line[36], line[37])

1 Ответ

0 голосов
/ 04 мая 2018

Если ваш CSV-файл не очень большой, я советую прочитать все целиком, извлекая нужные данные в словарь с номером билета в качестве ключа. Поиск слова очень быстрый.

Я изменил ваш код открытия файла, чтобы использовать оператор with, который корректно завершается ошибкой, если есть проблема с чтением файла. Кстати, нет необходимости указывать запятую в качестве разделителя CSV, так как это разделитель по умолчанию.

import csv

with open('Path To CSV file', "rb") as f:
    data = {line[1]: (line[36], line[37]) for line in csv.reader(f)}

newtickets = raw_input('Enter Ticket Numbers:').split()

for ticket in newtickets:
    line = data.get(ticket)
    if line:
        print(ticket, line)
    else:
        print(ticket, "not found")

Метод dict.get возвращает None, если ключ отсутствует в dict, хотя вы можете указать другое возвращаемое значение по умолчанию, если хотите. Таким образом, мы могли бы переписать эту часть так:

for ticket in newtickets:
    line = data.get(ticket, "not found")
    print(ticket, line)

В качестве альтернативы, мы могли бы использовать оператор in:

for ticket in newtickets:
    if ticket in data:
        print(ticket, data[ticket])
    else:
        print(ticket, "not found")

Все 3 версии имеют примерно одинаковую эффективность, выберите тот, который вы считаете наиболее читабельным.

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