Я пытаюсь загрузить и обработать файл CSV через HTML-форму, используя «Бутылку». Я уже создал рабочий пример с Tkinter; CSV загружается красиво, и все данные, включая хешированные пароли, попадают в базу данных Sqlite3.Загрузка и обработка файла CSV с использованием Bottle; Возможная ошибка кодирования
РАБОТА TkInter КОД ...
import os
import sqlite3
import csv
from pbkdf2 import crypt
from tkinter import *
from tkinter import filedialog
root = Tk()
root.geometry("500x500")
def open1():
filename = filedialog.askopenfilename()
with open(filename,"r") as s_info:
reader = csv.reader(s_info)
for x in reader:
pwhash = crypt(x[1])
connection = sqlite3.connect("users.db")
cursor_v = connection.cursor()
cursor_v.execute("insert into users (cemail, cpassword) values (?,?)", (x[0],pwhash))
connection.commit()
cursor_v.close()
else:
print("CSV Uploaded")
x = Button(text="Open",command=open1).pack()
Вопрос в том, когда я пытаюсь воссоздать код в бутылке, я получаю следующее сообщение об ошибке:
БУТЫЛКИ КОД - HTML :
<form action="/panel" method="post" enctype="multipart/form-data">
<input type="file" name="data" />
<input type="submit">
</form>
БУТЫЛКИ КОД - ROUTE:
@route('/panel', method='POST')
def do_upload():
data = request.files.data
with open(data,"r") as s_info:
reader = csv.reader(s_info)
for x in reader:
pwhash = crypt(x[1])
connection = sqlite3.connect("users.db")
cursor_v = connection.cursor()
cursor_v.execute("insert into users (cemail, cpassword) values (?,?)", (x[0],pwhash))
connection.commit()
cursor_v.close()
else:
return "<p>CSV Uploaded</p>"
ОШИБКА:
with open(data,"r") as s_info:
TypeError: invalid file: <bottle.FileUpload object at 0x105cb84d0>
Любая помощь приветствуется
Hi Тоторо. Спасибо за помощь. Я получаю эту ошибку сейчас ... для x в reader: ... _csv.Error: iterator должен возвращать строки, а не байты (вы открыли файл в текстовом режиме?) –
@VictorEliasRodriguez Да, у вас есть Python 3 .x, где 'urllib' возвращает байты, а' csv' ожидает строки. Таким образом, байты необходимо преобразовать в форму строки, указав кодек. Я обновил свой ответ. – totoro
Работает отлично. Не могу вас поблагодарить! –