Установите местоположение по умолчанию для сохранения файла с помощью python

#python

#python

Вопрос:

Я создаю скрипт python для преобразования всех файлов в папке в другой формат, указанный пользователем, но я хотел только один раз указать местоположение для сохранения файлов. Я уже пытался использовать askdirectory (), но выдает странную ошибку, что каталог, в котором находятся файлы, совпадает с тем, где они будут сохранены, даже добавляя разные переменные.

 import glob
import img2pdf
from pathlib import Path
from tkinter import Tk
from tkinter.filedialog import askdirectory


def img_to_pdf(arq, savefile):
    with open(f"{str(arq)[0:-4]}.pdf", "wb") as f:
        f.write(img2pdf.convert(arq))


def convert(filelocal, inpt, outpt, savefile):
    path = Path(str(filelocal))
    for arq in path.glob('*'):
        if arq.endswith(str(inpt)):
            if inpt == ".png" and outpt == ".pdf":
                img_to_pdf(arq, savefile)


def localfile():
    Tk().withdraw()
    filelocal = askdirectory()
    return filelocal


def filesave():
    Tk().withdraw()
    savefile = askdirectory()
    return savefile


if __name__ == '__main__':
    inpt = ".png"
    outpt = ".pdf"
    filelocal = localfile()
    savefile = filesave()
    convert(filelocal, inpt, outpt, savefile)
  

Любые предложения о том, как я могу решить эту проблему? Поскольку решения, которые я нашел до сих пор, помогают только в том случае, если требуется сохранить один файл, поэтому для каждого файла в папке он снова запрашивает местоположение. Я хочу определить местоположение для сохранения по умолчанию.

Комментарии:

1. Пожалуйста, укажите фактическую ошибку

2. Судя по всему, f.write(img2pdf.convert(arq)) это даже не учитывает ваше savefile местоположение. Вы должны указать целевое местоположение в своем with open(...) . Если вы просто хотите скопировать файл, я предлагаю вам заглянуть в shutil: docs.python.org/3/library/shutil.html

3. Если img_to_pdf следует использовать выбранный каталог, было бы неплохо использовать этот каталог. Вы нигде не используете outpt .

Ответ №1:

Я думаю, что я был не очень понятен с образцом кода, но я уже решил проблему. Если у кого-то возникает тот же вопрос, я сделал это так: вместо того, чтобы конвертировать файлы один за другим, функция получает список с путем ко всем из них и функцией askdirectory(), которую я открываю в функции, которая будет конвертировать, затем я выполняю цикл for для преобразованияфайл за файлом и переместите в папку назначения.

вот так:

 def img_to_pdf(arq):
    save_file = str(askdirectory(initialdir="/home"))
    for i in arq:
        fullname = str(i)[0:-4]   '.pdf'
        with open(fullname,"wb") as f:
            f.write(img2pdf.convert(str(i)))
        shutil.move(fullname, save_file)