我有一个脚本,如下所示,它可以从1只CSV文件的特定行下载文件。我没有问题,它运行良好,所有文件都下载到我的'Python项目'文件夹,根。
但是我想在这里添加一些功能,首先,下载不仅仅是1个而是多个(20个或更多)CSV文件,这样我就不必在这里手动更改名称- open('name 1. csv') 每次我的脚本完成这项工作。第二个请求,下载需要放在一个文件夹中,与下载的csv文件同名。希望我足够清楚:)
那我就可以:
- 名称1.csv-〉名称1文件夹-〉从名称1 csv下载
- 名称2.csv-〉名称2文件夹-〉从名称2 csv下载
- 名称3.csv-〉名称3文件夹-〉从名称3 csv下载
- ...
任何帮助或建议将不胜感激:)非常感谢!
from collections import Counter
import urllib.request
import csv
import os
with open('name1.csv') as csvfile: #need to add multiple .csv files here.
reader = csv.DictReader(csvfile)
title_counts = Counter()
for row in reader:
name, ext = os.path.splitext(row['link'])
title = row['title']
title_counts[title] += 1
title_filename = f"{title}_{title_counts[title]}{ext}".replace('/', '-') #need to create a folder for each CSV file with the download inside.
urllib.request.urlretrieve(row['link'], title_filename)
2条答案
按热度按时间ftf50wuq1#
您需要添加一个外部循环,该循环将遍历特定文件夹中的文件。您可以使用
os.listdir()
返回所有条目的列表,也可以使用glob.iglob()
和*.csv
模式仅获取扩展名为.csv
的文件。此外,您还可以在代码中进行一些小的改进。您使用
Counter
的方式是,它可以被替换为defaultdict
,甚至简单的dict
。此外,urllib.request.urlretrieve()
是遗留接口的一部分,可能会被弃用,因此您可以将其替换为urllib.request.urlopen()
和shutil.copyfileobj()
的组合。最后,要创建一个文件夹,您可以使用
os.mkdir()
,但以前您需要使用os.path.isdir()
检查文件夹是否已经存在,这是防止FileExistsError
异常所必需的。完整代码:
fzwojiic2#
For 1:循环遍历一个包含你想要的文件名的列表,这个列表可以用“os.listdir(path)”来检索,它返回一个包含在你的“path”中的文件列表(在你的例子中是一个包含csv文件的文件夹)。