Чтение имен файлов PDF из CSV и объединить PDF - PullRequest
0 голосов
/ 28 апреля 2018

Я перетасовал CSV-файл, содержащий имена файлов, относящиеся к PDF-файлам:

list1 = list(csv.reader(open('input.csv')))

random.shuffle(list1)
outputwriter = csv.writer(open("random.csv", "wb"))
outputwriter.writerows(list1)

Как видите, я также записал результат в новый CSV-файл, но я думаю, что в этом нет необходимости. В любом случае, случайно перемешанный список выглядит, например, так:

R001.pdf
L008.pdf
L009.pdf
L011.pdf
R006.pdf
L014.pdf
L016.pdf
R019.pdf
R021.pdf
R005.pdf
R007.pdf
L010.pdf
R004.pdf
L015.pdf
L018.pdf
L003.pdf
L012.pdf
L002.pdf
L017.pdf
L020.pdf
R013.pdf

Теперь я хотел объединить эти PDF-файлы в случайном порядке, используя PyPDF2.

from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
for x in list1:
    merger.append(x)

merger.write("result.pdf")

Однако это приводит к следующей ошибке:

AttributeError: 'list' object has no attribute 'seek'

Кто-нибудь знает, что я делаю не так? Я также попытался прочитать список из нового random.csv следующим образом:

merger = PdfFileMerger()
with open("random.csv") as f:
    r = csv.reader(f)
for x in r:
    merger.append(x)

Это, однако, также приводит к ошибке:

ValueError: I/O operation on closed file

Я был бы очень рад узнать, как это сделать! :)

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

list(csv.reader(fileobj)) возвращает список списков.

Документация говорит, что PdfFileMerger.append() принимает аргумент объекта файла, вы передаете его списки. , Попробуйте:

from PyPDF2 import PdfFileMerger
merger = PdfFileMerger()
for x in list1:
    with open(x[0]) as f:
        merger.append(f)

merger.write("result.pdf")
0 голосов
/ 28 апреля 2018

Вы открываете файлы, а не закрываете их. Всякий раз, когда вы используете .open() без .close(), возможны ошибки.

Всегда предпочтительнее использовать менеджер контекста, как вы это делали в последнем примере.

with open('filename.ext', mode='somemodeR\W'), поскольку это автоматически закрывает его, и вам не нужно беспокоиться о закрытии файла вручную при каждом его открытии.

...