csv Python [WinError 32]在移动过程中使用shutil.move(源,目标)(写入大部分文件,但不是全部)

mspsb9vt  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(139)

我试图添加一个图像文件的引用到一个下载的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),以防需要时间关闭文件或执行其他操作

xqk2d5yq

xqk2d5yq1#

看来我忘了包括我的打开命令的临时文件,因此临时文件没有被正确关闭。

with open(base_csv, 'r', encoding='UTF-8') as csvfile, temp_csv:

在此处更改此行解决了问题。

相关问题