python) output--download--file 到增量文件名

标签 python

我正在从 url 下载 pdf 文件。网址列表采用 .csv 格式。以下代码有效。但是,由于我所有的 url 都以 /filename1.pdf 结尾,因此输出会写在先前下载的 filename1.pdf 之上。我有大约 15,000 个 url,但最终只有一个文件(文件名 1)。有没有办法可以将下载的 pdf 文件重命名为增量数字?

import os
import csv
import requests

os.chdir('C:\\Users\\dul\\Dropbox\\CTO\\ctos')

write_path = 'C:\\Users\\dul\\Dropbox\\CTO\\ctos\\'
with open('urls.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile)
    for link in spamreader:
        print('-'*72)
        pdf_file = link[0].split('/')[-1]
        with open(os.path.join(write_path, pdf_file), 'wb') as pdf:
            try:
                # Try to request PDF from URL
                print('TRYING {}...'.format(link[0]))
                a = requests.get(link[0], stream=True)
                for block in a.iter_content(512):
                    if not block:
                        break

                    pdf.write(block)
                print('OK.')
            except requests.exceptions.RequestException as e:  
                print('REQUESTS ERROR:')
                print(e) 

最佳答案

使用enumerate()获取 csv 迭代器生成的每个项目的索引,然后在输出文件名前加上这个数字,使每个项目都是唯一的:

with open("urls.csv", "r") as csvfile:
    for idx, link in enumerate(csv.reader(csvfile)):
        print("-" * 72)
        pdf_file = "{idx:05}_{link}".format(idx=idx, link=link[0].split('/')[-1])
        print(pdf_file)

格式字符串的 {idx:05} 组件指示格式化程序将 idx 视为具有五个字符的宽度,并用零填充它。

结果:

------------------------------------------------------------------------
00000_filename1.pdf
------------------------------------------------------------------------
00001_filename1.pdf
...

关于python) output--download--file 到增量文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54890061/

相关文章:

python - 如何覆盖 django-allauth 中的模板?

python - python中的类似乎不是全局的

python - 什么是更简单、更 pythonic 的表达以下内容的方式?

python - 如何在结束循环之前查看生成器的打印输出?

python - Python 中的 CSV 解析

Python facebook-sdk Graph api访问错误

python - 如何在粘性框架中居中 tkinter 小部件

python - 查找十进制数的最后一位数字

python - 在 Django PostgreSQL 中排序太慢

python - 如何从 pandas 系列中制作 1 by n 数据框?