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.
SPL Official Website 👉 https://www.scudata.com
SPL Feedback and Help 👉 https://www.reddit.com/r/esProcSPL
SPL Learning Material 👉 https://c.scudata.com
SPL Source Code and Package 👉 https://github.com/SPLWare/esProc
Discord 👉 https://discord.gg/cFTcUNs7
Youtube 👉 https://www.youtube.com/@esProc_SPL