Python Pandas — чтение CSV или ExcelPython

Программы на Python
Ответить
Anonymous
 Python Pandas — чтение CSV или Excel

Сообщение Anonymous »

Я разрешаю пользователям загружать файлы CSV или Excel. Я использую pandas для чтения файла и создания кадра данных. Поскольку я не могу предсказать, какой тип файла загрузит пользователь, я заключил pd.read_csv() и pd.read_excel() в блок try/Exception.

Код: Выделить всё

if form.validate_on_submit():
input_filename = secure_filename(form.file.data.filename)
try:
df = pd.read_csv(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')
except:
df = pd.read_excel(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')
Если pd.read_csv() стоит первым в блоке try/Exception и я загружаю файл .csv, это работает. Если я попытаюсь загрузить файл .xlsx, я получаю следующую ошибку:

Код: Выделить всё

TypeError: expected str, bytes or os.PathLike object, not NoneType
Если pd.read_excel() стоит первым в блоке try/Exception и я загружаю файл .xlsx, это работает. Если я попытаюсь загрузить файл .csv, я получаю следующую ошибку:

Код: Выделить всё

pandas.io.common.EmptyDataError: No columns to parse from file
Раньше я использовал mimetype для маршрутизации файла к правильной функции pandas, но я надеялся на более чистое (и всеобъемлющее) решение, которое не включало бы несколько if /элиф заявления. Вот что у меня было:

Код: Выделить всё

if form.file.data.mimetype == 'text/csv':
df = pd.read_csv(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')
elif form.file.data.mimetype == 'application/octet-stream':
df = pd.read_excel(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')
elif form.file.data.mimetype == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet':
df = pd.read_excel(form.file.data, header=0, skip_blank_lines=True, skipinitialspace=True, encoding='latin-1')
else:
flash('Error Uploading File. Invalid file type. Please use xls, xlsx or csv.', 'danger')
return render_template('upload.html', current_user=current_user, form=form)
Я использую Flask, WTForms и Python 3. Спасибо.

Подробнее здесь: https://stackoverflow.com/questions/417 ... v-or-excel
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»