Я новичок в Python и борюсь со следующим. Пользователи загружают CSV файл, который затем обрабатываю. Однако многое может пойти не так. Основными проблемами, которые я нашел, являются: а) файлы, которые они загружают, не являются файлами CSV, или б) файлы не загружаются с использованием кодировки UTF8 (которая по умолчанию используется в нашей системе).
Вопрос в том, где именно я должен проверить эти проблемы? Это мой сценарий:
with open(path) as f:
reader = csv.reader(f)
for row in reader:
(do stuff...)
Я попытался добавить это:
try:
reader = csv.reader(f)
except:
error = "There was an error..."
Но если пользователь загружает файл с неправильной кодировкой, то это не поймано. Кажется, что он только что пойман, когда начинается цикл (для строки в считывателе), и только для конкретной строки, которая вызывает проблемы. Означает ли это, что я должен иметь такую проверку ошибок внутри оператора for? Мне кажется намного лучше сделать это только один раз, а не на каждом предмете, но я не уверен, что здесь больше всего смысла...
Могут быть более прямые способы поймать подобные вещи с помощью CSV-ридера (я не уверен), но когда у меня есть входные файлы, поступающие от других пользователей с возможностью подобных ошибок, я просто разбираю файлы вручную. Например:
import sys
NumFields = 3
inf = open(path, "rU")
for line in inf:
line = line.strip() #get rid of weird end-of-line characters from bad encoding
ls = line.split(",")
if len(ls) != NumFields:
ls = line.split("\t") ##if you can't get the number of fields with comma split, try tab
if len(ls) != NumFields:
sys.exit(1)
print ls