Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过重命名修复csv列中具有相同图像的不同id?_Python - Fatal编程技术网

Python 通过重命名修复csv列中具有相同图像的不同id?

Python 通过重命名修复csv列中具有相同图像的不同id?,python,Python,作为一名新的Python程序员,我很难理解如何完成以下任务 给定csv文件中的输入数据: Sku图像\u名称 B001 a.jpg B002 a.jpg B001 b.jpg B002 c.jpg B003 x.jpg 其中,多个Sku可能具有相同的图像名称。当出现这种情况时,我想通过将“+Sku值连接到同一行中的图像名称,来重命名image\uu name列中的图像名称 因此,所需的输出数据为: Sku图像\u名称 B001 a_B001.jpg B002 a_B002.jpg B001 b

作为一名新的Python程序员,我很难理解如何完成以下任务

给定csv文件中的输入数据:

Sku图像\u名称
B001 a.jpg
B002 a.jpg
B001 b.jpg
B002 c.jpg
B003 x.jpg
其中,多个
Sku
可能具有相同的图像名称。当出现这种情况时,我想通过将
+
Sku
值连接到同一行中的图像名称,来重命名
image\uu name
列中的图像名称

因此,所需的输出数据为:

Sku图像\u名称
B001 a_B001.jpg
B002 a_B002.jpg
B001 b.jpg
B002 c.jpg
B003 x.jpg
之后,应根据
image\u Name
列重命名图像文件夹中的图像

到目前为止,我只有这些:

import csv

#open and store the csv file
with open('D:\\test.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',')

好的,您还有很多路要走,但这应该会给您一些关于如何继续的提示(假设文件数量合理):


有很多方法可以改进此代码。这里的目的是让它更容易理解。首先理解它,然后改进它。

那么你想在图像文件夹中将
a.jpg
重命名为两个不同的名称吗?是的,只有当不同的sku具有相同的imagename大小写时,我想你没有领会我的意思。一般来说,一个文件只有一个名称,因此不可能给
a.jpg
两个不同的名称。@martineau我猜(希望)OP中所有sku都有名为
{name}{sku}.jpg
的图像。虽然我可能错了。@Wayne:我怀疑这一点,因为在接近结尾的部分,OP希望相应地重命名图像文件夹中的文件。我想可以用不同的名称创建同一图像文件的多个副本,但这样做也没有多大意义(IMO)。我有一个图像文件,我需要创建另一个副本,并根据图像列重命名,,,,如果您能解释逻辑的话?非常感谢much@sqllover999如上所述。east to understand方法是使用需要复制的所有文件的新名称进行复制,然后删除具有原始名称的版本。显然,在每种情况下少复制一个副本并用重命名来代替它更有效,但要做到这一点有点困难。上面有足够的内容需要学习,所以请先记下来。@sqllover999您看到我在上面根据您的评论所做的更改了吗?
import csv
import os
from os.path import splitext # splits name & extension from a file
import shutil   #making a duplicate copy of a file
from os import rename


#open and read csv
with open('test.csv') as csvfile:

#create list for sku,old_imagename and new imagename
    itemList = []
    renamedList = []
    keyList = []
    spamreader = csv.reader(csvfile, delimiter=",")

#processing every row at a time
    for row in spamreader:
        keyList.append(row[0])              #for sku
        itemList.append(row[1])             #for old_imagename
        renamedList.append(row[1])          #for new_imagename


#Processing only sku having same images
toBeChanged = [itemNum for itemNum, item in enumerate(itemList)
                if itemList.count(item) > 1]

for itemNum in toBeChanged:
    name, ext = splitext(itemList[itemNum])  # splitting image name & extension: eg a-> "a" & "jpg"
    oldFileName = name + ext
    print("oldFileName = " + oldFileName)    # oldFileName = a.jpg
    newFileName = '{}_{}{}'.format(name, keyList[itemNum], ext)
    print("newFileName = " + newFileName)    # newFileName = a_B001.jpg & a_B002.jpg


# check if the Image file exists,
    if(os.path.isfile(oldFileName)):
        shutil.copy2(oldFileName, newFileName);        # creating a duplicate image file
        renamedList[itemNum] = '{}_{}{}'.format(name, keyList[itemNum], ext)  #a_B001.jpg
        # os.remove(oldFileName)


#write the final output in new csv
with open('newCsv.csv','w') as mycsv:
    csvWriter = csv.writer(mycsv,delimiter=",")
    for row in zip(keyList, renamedList):
        print(row[0] + '\t' + '\t' + row[1])
        csvWriter.writerow([row[0],row[1]])
import csv
import os
from os.path import splitext # splits name & extension from a file
import shutil   #making a duplicate copy of a file
from os import rename


#open and read csv
with open('test.csv') as csvfile:

#create list for sku,old_imagename and new imagename
    itemList = []
    renamedList = []
    keyList = []
    spamreader = csv.reader(csvfile, delimiter=",")

#processing every row at a time
    for row in spamreader:
        keyList.append(row[0])              #for sku
        itemList.append(row[1])             #for old_imagename
        renamedList.append(row[1])          #for new_imagename


#Processing only sku having same images
toBeChanged = [itemNum for itemNum, item in enumerate(itemList)
                if itemList.count(item) > 1]

for itemNum in toBeChanged:
    name, ext = splitext(itemList[itemNum])  # splitting image name & extension: eg a-> "a" & "jpg"
    oldFileName = name + ext
    print("oldFileName = " + oldFileName)    # oldFileName = a.jpg
    newFileName = '{}_{}{}'.format(name, keyList[itemNum], ext)
    print("newFileName = " + newFileName)    # newFileName = a_B001.jpg & a_B002.jpg


# check if the Image file exists,
    if(os.path.isfile(oldFileName)):
        shutil.copy2(oldFileName, newFileName);        # creating a duplicate image file
        renamedList[itemNum] = '{}_{}{}'.format(name, keyList[itemNum], ext)  #a_B001.jpg
        # os.remove(oldFileName)


#write the final output in new csv
with open('newCsv.csv','w') as mycsv:
    csvWriter = csv.writer(mycsv,delimiter=",")
    for row in zip(keyList, renamedList):
        print(row[0] + '\t' + '\t' + row[1])
        csvWriter.writerow([row[0],row[1]])