Python 基于与路径名的匹配在csv中复制行,并用指定字符串替换每行中的常量字符串

Python 基于与路径名的匹配在csv中复制行,并用指定字符串替换每行中的常量字符串,python,csv,duplicates,copy,Python,Csv,Duplicates,Copy,我有一个由两部分组成的问题。我对python非常陌生,所以我甚至不知道如何开始编写这个 我想根据指定文件夹中图像的路径名复制(复制粘贴)csv中的每一行。与文件夹中图像的路径名匹配的每一行必须在csv中复制3次 然后,我想将第一列中的字符串“training/”替换为重复行中的“training/red”、“training/green”和“training/blue” 最后,我希望csv的每一原始行有4行。一个用于原始路径名,一个用于每种颜色(RGB) 下面是一个csv示例(直接从记事本复制)

我有一个由两部分组成的问题。我对python非常陌生,所以我甚至不知道如何开始编写这个

我想根据指定文件夹中图像的路径名复制(复制粘贴)csv中的每一行。与文件夹中图像的路径名匹配的每一行必须在csv中复制3次

然后,我想将第一列中的字符串“training/”替换为重复行中的“training/red”、“training/green”和“training/blue”

最后,我希望csv的每一原始行有4行。一个用于原始路径名,一个用于每种颜色(RGB)

下面是一个csv示例(直接从记事本复制):

结果应该如下所示:

Image,x1,y1,x2,y2,x3,y3,x4,y4,x5,y5,x6,y6,x7,y7,x8,y8,x9,y9,x10,y10,x11,y11,x12,y12,x13,y13,x14,y14,x15,y15
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/DN26 female a spiracle 1.JPG,1605,1252,892,1299,1199,1557,1647,1577,1971,1428,2101,1195,1947,963,1564,838,1290,845,1208,815,1154,760,1111,632,992,601,877,639,740,853
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/Kaalplaas b 3.JPG,1789,1260,888,1288,1225,1603,1860,1560,2092,1431,2191,1186,2006,898,1750,771,1536,711,1426,659,1356,570,1259,421,1094,347,937,410,843,680
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/OP2576v__bBURF - Spiracle 2.JPG,1446,1020,594,1181,1025,1453,1525,1403,1872,1203,1936,934,1793,715,1369,547,1047,549,933,523,842,474,791,356,692,307,601,358,529,556
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/redDN26 female a spiracle 1.JPG,1605,1252,892,1299,1199,1557,1647,1577,1971,1428,2101,1195,1947,963,1564,838,1290,845,1208,815,1154,760,1111,632,992,601,877,639,740,853
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/redKaalplaas b 3.JPG,1789,1260,888,1288,1225,1603,1860,1560,2092,1431,2191,1186,2006,898,1750,771,1536,711,1426,659,1356,570,1259,421,1094,347,937,410,843,680
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/redOP2576v__bBURF - Spiracle 2.JPG,1446,1020,594,1181,1025,1453,1525,1403,1872,1203,1936,934,1793,715,1369,547,1047,549,933,523,842,474,791,356,692,307,601,358,529,556
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/greenDN26 female a spiracle 1.JPG,1605,1252,892,1299,1199,1557,1647,1577,1971,1428,2101,1195,1947,963,1564,838,1290,845,1208,815,1154,760,1111,632,992,601,877,639,740,853
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/greenKaalplaas b 3.JPG,1789,1260,888,1288,1225,1603,1860,1560,2092,1431,2191,1186,2006,898,1750,771,1536,711,1426,659,1356,570,1259,421,1094,347,937,410,843,680
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/greenOP2576v__bBURF - Spiracle 2.JPG,1446,1020,594,1181,1025,1453,1525,1403,1872,1203,1936,934,1793,715,1369,547,1047,549,933,523,842,474,791,356,692,307,601,358,529,556
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/blueDN26 female a spiracle 1.JPG,1605,1252,892,1299,1199,1557,1647,1577,1971,1428,2101,1195,1947,963,1564,838,1290,845,1208,815,1154,760,1111,632,992,601,877,639,740,853
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/blueKaalplaas b 3.JPG,1789,1260,888,1288,1225,1603,1860,1560,2092,1431,2191,1186,2006,898,1750,771,1536,711,1426,659,1356,570,1259,421,1094,347,937,410,843,680
C:/Users/Deon Bakkes/Desktop/GTTM spiracle ML LM trial/training/blueOP2576v__bBURF - Spiracle 2.JPG,1446,1020,594,1181,1025,1453,1525,1403,1872,1203,1936,934,1793,715,1369,547,1047,549,933,523,842,474,791,356,692,307,601,358,529,556
您可以应用为每个文件名添加前缀。代码:

导入csv
从pathlib导入路径
src_path=path(r“source.csv”)
以open(src_path)作为inp_f,open(src_path.以_stem(src_path.stem+“_new”),“w”,newline=“”)作为out_f:
reader=csv.reader(inp\u f)
writer=csv.writer(out\u f)
writer.writerow(下一个(读写器“”)#写入标题
对于读取器中的行:
img_path=路径(第[0]行)
if img_path.isfile():#如果文件存在
writer.writerows([str(img_path.with_stem(p+img_path.stem))]+row[1:]表示p in(“,”红色“,”绿色“,”蓝色”))

好的。。。对于其他可能感兴趣的人。我试图通过制作3个单独的csv,替换一个字符串并重新组合它们来找到解决方案。注意,我还使用tk选择文件夹并给出csv的基本名称

import Tkinter, tkFileDialog
import tkSimpleDialog
import os
import csv

root = Tkinter.Tk()
root.withdraw()
folder = tkFileDialog.askdirectory(parent=root,initialdir="/",title='Please select your directory with TRAINING images for data augmentation')

diagnostic_feature_name = tkSimpleDialog.askstring(title="Diagnostic feature",
                                  prompt="Diagnostic morphology feature name?:")

input_csv = os.path.join(folder, diagnostic_feature_name + ".csv")
output_csv_red = os.path.join(folder, diagnostic_feature_name + "red.csv")
output_csv_blue = os.path.join(folder, diagnostic_feature_name + "blue.csv")
output_csv_green = os.path.join(folder, diagnostic_feature_name + "green.csv")

#red
with open(output_csv_red ,'wb') as outFile:
    fileWriter = csv.writer(outFile)
    with open(input_csv,'r') as inFile:
        fileReader = csv.reader(inFile)
        next(fileReader)
        for row in fileReader:
            fileWriter.writerow(row)

text = open(output_csv_red, "r")
text = ''.join([i for i in text]) \
    .replace("training/", "training/red")
x = open(output_csv_red,"w")
x.writelines(text)
x.close()

#blue
with open(output_csv_blue ,'wb') as outFile:
    fileWriter = csv.writer(outFile)
    with open(input_csv,'r') as inFile:
        fileReader = csv.reader(inFile)
        next(fileReader)
        for row in fileReader:
            fileWriter.writerow(row)

text = open(output_csv_blue, "r")
text = ''.join([i for i in text]) \
    .replace("training/", "training/blue")
x = open(output_csv_blue,"w")
x.writelines(text)
x.close()

#green
with open(output_csv_green ,'wb') as outFile:
    fileWriter = csv.writer(outFile)
    with open(input_csv,'r') as inFile:
        fileReader = csv.reader(inFile)
        next(fileReader)
        for row in fileReader:
            fileWriter.writerow(row)

text = open(output_csv_green, "r")
text = ''.join([i for i in text]) \
    .replace("training/", "training/green")
x = open(output_csv_green,"w")
x.writelines(text)
x.close()

#combine csv files

with open(input_csv,'ab') as outFile:
    fileWriter = csv.writer(outFile)
    with open(output_csv_red,'r') as inFile:
        fileReader = csv.reader(inFile)
        for row in fileReader:
            fileWriter.writerow(row)

with open(input_csv,'ab') as outFile:
    fileWriter = csv.writer(outFile)
    with open(output_csv_blue,'r') as inFile:
        fileReader = csv.reader(inFile)
        for row in fileReader:
            fileWriter.writerow(row)

with open(input_csv,'ab') as outFile:
    fileWriter = csv.writer(outFile)
    with open(output_csv_green,'r') as inFile:
        fileReader = csv.reader(inFile)
        for row in fileReader:
            fileWriter.writerow(row)

将您已经完成的代码添加到问题中会很好,请也添加结果应该是什么样子。
import Tkinter, tkFileDialog
import tkSimpleDialog
import os
import csv

root = Tkinter.Tk()
root.withdraw()
folder = tkFileDialog.askdirectory(parent=root,initialdir="/",title='Please select your directory with TRAINING images for data augmentation')

diagnostic_feature_name = tkSimpleDialog.askstring(title="Diagnostic feature",
                                  prompt="Diagnostic morphology feature name?:")

input_csv = os.path.join(folder, diagnostic_feature_name + ".csv")
output_csv_red = os.path.join(folder, diagnostic_feature_name + "red.csv")
output_csv_blue = os.path.join(folder, diagnostic_feature_name + "blue.csv")
output_csv_green = os.path.join(folder, diagnostic_feature_name + "green.csv")

#red
with open(output_csv_red ,'wb') as outFile:
    fileWriter = csv.writer(outFile)
    with open(input_csv,'r') as inFile:
        fileReader = csv.reader(inFile)
        next(fileReader)
        for row in fileReader:
            fileWriter.writerow(row)

text = open(output_csv_red, "r")
text = ''.join([i for i in text]) \
    .replace("training/", "training/red")
x = open(output_csv_red,"w")
x.writelines(text)
x.close()

#blue
with open(output_csv_blue ,'wb') as outFile:
    fileWriter = csv.writer(outFile)
    with open(input_csv,'r') as inFile:
        fileReader = csv.reader(inFile)
        next(fileReader)
        for row in fileReader:
            fileWriter.writerow(row)

text = open(output_csv_blue, "r")
text = ''.join([i for i in text]) \
    .replace("training/", "training/blue")
x = open(output_csv_blue,"w")
x.writelines(text)
x.close()

#green
with open(output_csv_green ,'wb') as outFile:
    fileWriter = csv.writer(outFile)
    with open(input_csv,'r') as inFile:
        fileReader = csv.reader(inFile)
        next(fileReader)
        for row in fileReader:
            fileWriter.writerow(row)

text = open(output_csv_green, "r")
text = ''.join([i for i in text]) \
    .replace("training/", "training/green")
x = open(output_csv_green,"w")
x.writelines(text)
x.close()

#combine csv files

with open(input_csv,'ab') as outFile:
    fileWriter = csv.writer(outFile)
    with open(output_csv_red,'r') as inFile:
        fileReader = csv.reader(inFile)
        for row in fileReader:
            fileWriter.writerow(row)

with open(input_csv,'ab') as outFile:
    fileWriter = csv.writer(outFile)
    with open(output_csv_blue,'r') as inFile:
        fileReader = csv.reader(inFile)
        for row in fileReader:
            fileWriter.writerow(row)

with open(input_csv,'ab') as outFile:
    fileWriter = csv.writer(outFile)
    with open(output_csv_green,'r') as inFile:
        fileReader = csv.reader(inFile)
        for row in fileReader:
            fileWriter.writerow(row)