Python 2.7 避免使用urllib替换文件,而是使用类似于_1,_2的名称
我有一个csv文件,包含图像URL和两列给定的文件名。在文件中,有些文件名是重复的,但它们各自的链接是唯一的。我想保存所有的图像。所以如果 给定的filename.jpg图像存在,我希望下一个图像保存为filename_2、filename_3 我使用一个简单的urllib.urlretrieve行来获取导入的图像:Python 2.7 避免使用urllib替换文件,而是使用类似于_1,_2的名称,python-2.7,urllib,Python 2.7,Urllib,我有一个csv文件,包含图像URL和两列给定的文件名。在文件中,有些文件名是重复的,但它们各自的链接是唯一的。我想保存所有的图像。所以如果 给定的filename.jpg图像存在,我希望下一个图像保存为filename_2、filename_3 我使用一个简单的urllib.urlretrieve行来获取导入的图像: import csv import os import re import urllib 首先,存储您的csv数据 file_names = [] urls = [] with
import csv
import os
import re
import urllib
首先,存储您的csv数据
file_names = []
urls = []
with open('data.csv', 'r') as file:
reader = csv.reader(file)
for file_name, url in reader:
file_names.append(file_name)
urls.append(url)
file.close()
创建一个新列表以存储新文件名
new_file_names = []
反复浏览文件名
列表
for file_name in file_names:
for temp_file_name in new_file_names:
if temp_file_name == file_name:
new_file_names.append(file_name)
抓取文件扩展名。有许多图像扩展名:.jpg、.png等
这是假设文件扩展名只有4个字符长,包括
,只要在整个文档中看到[-4:]
,就要小心。如果存在问题,请使用regex获取文件扩展名
接下来,遍历新文件名
列表,查看是否从文件名
列表中获取与文件名
匹配的内容
for file_name in file_names:
for temp_file_name in new_file_names:
if temp_file_name == file_name:
new_file_names.append(file_name)
当我们得到一个匹配项时,首先检查它是否已经有一个'\ub+
+文件\u ext
。这意味着>+任何数字
+文件
check = re.search('_\d+' + file_ext, temp_file_name)
inverse = re.search('.*_(?=\d+' + file_ext + ')', file_name)
file_name = inverse.group(0) + str(number) + file_ext
如果检查为True
,我们现在希望查看该数字并添加一个
if check:
number = int(check.group(0)[1:-4]) + 1
现在,我们希望像以前一样执行相反的正则表达式,因此我们只获得文件名+\uu
,但不包含所有数字。然后添加新号码和文件_ext
check = re.search('_\d+' + file_ext, temp_file_name)
inverse = re.search('.*_(?=\d+' + file_ext + ')', file_name)
file_name = inverse.group(0) + str(number) + file_ext
此else
用于首次出现匹配时,将\u 1
添加到文件名的末尾
else:
file_name = file_name[:-4] + '_1' + file_ext
将文件名
附加到新文件名
列表中
for file_name in file_names:
for temp_file_name in new_file_names:
if temp_file_name == file_name:
new_file_names.append(file_name)
设置用于存储图像的文件夹(如果需要)。如果该文件夹不存在,它将为您创建一个
path = 'img/'
try:
os.makedirs(path)
except OSError:
if not os.path.isdir(path):
raise
最后,为了保存图像,我们使用for
循环并压缩新文件名和URL
。在循环中,我们使用urllib.urlretrieve
下载图像
for file_name, url in zip(new_file_names, urls):
urllib.urlretrieve(url, path + file_name)
进口:
import csv
import os
import re
import urllib
首先,存储您的csv数据
file_names = []
urls = []
with open('data.csv', 'r') as file:
reader = csv.reader(file)
for file_name, url in reader:
file_names.append(file_name)
urls.append(url)
file.close()
创建一个新列表以存储新文件名
new_file_names = []
反复浏览文件名
列表
for file_name in file_names:
for temp_file_name in new_file_names:
if temp_file_name == file_name:
new_file_names.append(file_name)
抓取文件扩展名。有许多图像扩展名:.jpg、.png等
这是假设文件扩展名只有4个字符长,包括
,只要在整个文档中看到[-4:]
,就要小心。如果存在问题,请使用regex获取文件扩展名
接下来,遍历新文件名
列表,查看是否从文件名
列表中获取与文件名
匹配的内容
for file_name in file_names:
for temp_file_name in new_file_names:
if temp_file_name == file_name:
new_file_names.append(file_name)
当我们得到一个匹配项时,首先检查它是否已经有一个'\ub+
+文件\u ext
。这意味着>+任何数字
+文件
check = re.search('_\d+' + file_ext, temp_file_name)
inverse = re.search('.*_(?=\d+' + file_ext + ')', file_name)
file_name = inverse.group(0) + str(number) + file_ext
如果检查为True
,我们现在希望查看该数字并添加一个
if check:
number = int(check.group(0)[1:-4]) + 1
现在,我们希望像以前一样执行相反的正则表达式,因此我们只获得文件名+\uu
,但不包含所有数字。然后添加新号码和文件_ext
check = re.search('_\d+' + file_ext, temp_file_name)
inverse = re.search('.*_(?=\d+' + file_ext + ')', file_name)
file_name = inverse.group(0) + str(number) + file_ext
此else
用于首次出现匹配时,将\u 1
添加到文件名的末尾
else:
file_name = file_name[:-4] + '_1' + file_ext
将文件名
附加到新文件名
列表中
for file_name in file_names:
for temp_file_name in new_file_names:
if temp_file_name == file_name:
new_file_names.append(file_name)
设置用于存储图像的文件夹(如果需要)。如果该文件夹不存在,它将为您创建一个
path = 'img/'
try:
os.makedirs(path)
except OSError:
if not os.path.isdir(path):
raise
最后,为了保存图像,我们使用for
循环并压缩新文件名和URL
。在循环中,我们使用urllib.urlretrieve
下载图像
for file_name, url in zip(new_file_names, urls):
urllib.urlretrieve(url, path + file_name)
使用os.path.isfile
检查文件是否存在。如果存在,请更改新文件的名称。使用os.path.isfile
检查文件是否存在。如果是,请更改新文件的名称。