Get Eligible CSV Data to Replace Certain Text in Another CSV

Question

I just started with Python 3.4.2 and trying to find and replace text in CSV file.

In details, Input.csv file contains the following lines:

0,0,0,13,.\New\_Path-1.1.12\Impl\Appli\Library\Module_RM\Code\src\Exception.cpp

 

0,0,0,98,.\Old_Path-1.1.12\Impl\Appli\Library\Prof_bus\Code\src\Wrapper.cpp

 

0,0,0,26,.\New_Path-1.1.12\Impl\Support\Custom\Vital\Code\src\Interface.cpp

 

0,0,0,114,.\Old_Path-1.1.12\Impl\Support\Custom\Cust\Code\src\Config.cpp

 

I maintained my strings to be searched in another file named list.csv:

Module_RM

 

Prof_bus

 

Vital

 

Cust

 

Now I need to go through each line of Input.csv and replace the last column with the matched string. My findl result should be like this:

0,0,0,13,Module_RM

 

0,0,0,98,Prof_bus

 

0,0,0,26,Vital

 

0,0,0,114,Cust

 

I read the input file’s first line as a list. So the text which I need to replace came inline[4]. I am reading each module name in the list.csv file and checking if there is any match of text inline[4]. I am not able to make that if condition is true. Please let me know if it is not a proper search.

import csv

 

import re

 

with open("D:\\My_Python\\New_Python_Test\\Input.csv") as source, open("D:\\My\_Python\\\New_Python_Test\\List.csv") as module_names, open("D:\\My_Python\\New_Python_Test\\Final_File.csv","w",newline="") as result:

 

reader=csv.reader(source)

 

module=csv.reader(module_names)

 

writer=csv.writer(result)

 

#lines=source.readlines()

 

for line in reader:

 

for mod in module_names:

 

 if any(\[mod in s for s in line\]):

 

 line.replace(reader\[4\],mod)

 

 print ("YES")

 

 writer.writerow("OUT")

 

 print (mod)

 

module_names.seek(0)

 

lines=reader

 

Please guide me to complete this task. Thanks for your support!

 

Here’s one solution:

import csv

 

with open("D:\\My_Python\\New_Python_Test\\Input.csv") as source, open("D:\\My_Python\\New_Python_Test\\List.csv") as module_names, open("D:\\My_Python\\New_Python_Test\\Final_File.csv","w",newline="") as result:

 

 reader=csv.reader(source)

 

 module=csv.reader(module_names)

 

 writer=csv.writer(result)

 

 flag=False

 

 for row in reader:

 

 i=row[4]

 

 for s in module_names:

 

 k=s.strip()

 

 if i.find(k)!=-1 and flag==False:

 

 row[4]=k

 

 writer.writerow(row)

 

 flag=True

 

 module_names.seek(0)

 

 flag=False

 

Answer

This is a structured computation. esProc SPL (Structured Process Language) is able to handle it independently without running a loop. Below is the SPL script:

A

1

=file("D:\\input.csv").import@c()

2

=file("D:\\list.csv").import()

3

=A1.run(_5=A2.select@1(pos(A1.#5,#1)).(#1))

4

=file("D:\\result.csv").export(A1;",")

A3: Get records meeting the specified condition to assign them to A1’s _5 field.

undefined