Как получить абсолютный путь к файлам после загрузки pdf-файлов и преобразования их в csv в Django? - PullRequest
0 голосов
/ 29 апреля 2020

Что я сделал:

  1. Пользователь загружает файл в формате PDF;
  2. Включает в текст и извлекает значения и сохраняет их в БД;
  3. pdf таблица распаковывается Camelot, а затем преобразует его в CSV и сохраняет его в другой папке;
  4. Возвращает путь к функции, чтобы выполнить итерацию файла 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


...