Что я сделал:
- Пользователь загружает файл в формате PDF;
- Включает в текст и извлекает значения и сохраняет их в БД;
pdf
таблица распаковывается Camelot, а затем преобразует его в CSV
и сохраняет его в другой папке; - Возвращает путь к функции, чтобы выполнить итерацию файла CSV и сохранить его в БД.
Но я столкнулся с проблемой: данные таблицы преобразуются в CSV
и сохраняются в папке, но я не могу вернуть путь с файлом (.csv
расширение).
def upload(request):
if request.method == 'POST':
pos = Model.objects.all()
form = ModelForm(request.POST, request.FILES)
if form.is_valid():
form.save()
file_name = form.cleaned_data['pdf'].name
file_name1 = form.cleaned_data['choose']
get_file = Model.objects.last()
print(file_name1)
print(form.cleaned_data['pdf'].name)
text=convert_pdf_to_txt(file_name) #In there converts the pdf file and returns text file in
#this finction.
print(text)
path = '/pos/pdfs/{}'.format(file_name)
if file_name1 == "x": #here check for which pdf text and its own regex.
#different pdf different regex.
regex_Q ='len:\s?([0-9]+)'
regex_no ='patch\s\s\s\s?([0-9]+)'
Q_No=get_info_from_text(text,regex_Q )
s_No=get_info_from_text(text,regex_no )
elif file_name1 == "y":
regex_Q = 'Un\s?([0-9\,]+)'
regex_no = 'Nu\s?([0-9]+)'
Q_No = get_info_from_text(text, regex_Q )
s_No = get_info_from_text(text, regex_no)
data = tables_extract(path) #in here csv directory path will return and i want to iterate it
#with csv reader
#and put it into my Model or ORM fields like data1, data2 to
#store it into my database
print(data)
with open(data) as f:
reader = csv.reader(f)
for row in reader:
get_file.data1 = row[1]
get_file.data2 = row[2]
get_file.data3 = row[3]
get_file.data4 = row[4]
get_file.save()
get_file.value1 = Q_No
get_file.value2 = s_No
get_file.save()
return redirect('list')
def tables_extract(file_name):
# this will extract my tables from pdf and convert
# it into csv in a directory
# then return it to data = tables_extract(path)
basename = os.path.basename(file_name)
basename_without_extension = os.path.splitext(basename)[0]
print(basename_without_extension)
tables = camelot.read_pdf(file_name, pages="1-end")
table= tables[2].df
file = table.to_csv("{}{}.csv".format('/pos/csv/',basename_without_extension))
print(file) # it prints None and i try to return this but it said None
filename_with_path = '/pos/csv/{}'.format(basename_without_extension)
print(filename_with_path)
return filename_with_path #File "mysite\core\views.py", line 130, in upload
# with open(data) as f:
# FileNotFoundError: [Errno 2] No such file or directory:
# '/pos/csv/pdf_file'
# filename_with_path this returns the only path and file without '.csv' extension. so um unable to iterate my CSV file and store it into my DB