我试图添加一个图像文件的引用到一个下载的csv文件中,该文件中充满了产品名称和SKU。
我下载了一个csv文件与1055行(产品),我有1,635画廊的图像,应绑定到这些产品。所以在循环后,我应该有一个临时的csv文件与1,635行。其中产品与多个图像被列为重复。
base_csv = 'products_gallery.csv'
temp_csv = NamedTemporaryFile(mode='w', delete=False)
gallery_path = 'path_to_images/compressed_gallery'
gallery_imgs = os.listdir(gallery_path)
fields = ['name','sku','product_id','gallery_image']
#update all rows to contain the images.
with open(base_csv, 'r', encoding='UTF-8') as csvfile:
reader = csv.DictReader(csvfile, fieldnames=fields, delimiter='\t') #read downloaded csv file
writer = csv.DictWriter(temp_csv, fieldnames=fields, delimiter='\t') #write to temp csv file
for row in reader:
for img_name in gallery_imgs: #loop through local images and match product names
if row['name'] in img_name:
row['gallery_image'] = img_name
writer.writerow(row)
else:
continue
time.sleep(10) #doesn't help
shutil.move(temp_csv.name, base_csv)
代码在上面的最后一行中崩溃
权限错误:[WinError 32]进程无法访问文件,因为另一个进程正在使用该文件:'C:\用户路径\应用程序数据\本地\临时\临时'
然而不知何故,它设法写/更新我的主csv文件到1,569行,只错过了最后39个产品。创建的临时csv文件有所有1,635行。我不知道为什么这将工作部分,而不是没有在所有。我用这个确切的代码之前修改其他csv文件,我已经创建了没有任何问题。
我试过:从任务管理器中清除python进程重新启动以清除进程在shutil.move()之前添加time.sleep(10),以防需要时间关闭文件或执行其他操作
1条答案
按热度按时间xqk2d5yq1#
看来我忘了包括我的打开命令的临时文件,因此临时文件没有被正确关闭。
在此处更改此行解决了问题。