Reputation: 19
I am a python beginner and need your help. I need to split columns in a CSV on certain places which I find with regex. Split applied to CSV produces errors. Besides, some findings are not equal distributed in the columns.
The structure of CSV is like this:
a; b; c;
d; e, f, g; h
i; j,e; k
I need to split after every e and to transform the CSV like this:
a; ; b; c;
d; e; f, g; h
i; j; e; k
I have this code :
import csv
import re
r = re.compile("r'....\(...\)")
with open('test.csv', 'r') as csvfile:
reader = csv.reader(csvfile, delimiter=';')
your_list = list(reader)
your_list=r.split(your_list)
print(your_list)
I'm getting this error :
TypeError: expected string or bytes-like object
Upvotes: 1
Views: 154
Reputation: 4689
Not sure if this is the correct approach, but your specific error comes from trying to pass a list of strings to the regex matcher. You'll need to pass it each string separately.
Instead of
your_list = list(reader)
your_list=r.split(your_list)
Write
your_list=[r.split(x) for x in reader]
Edit: Never mind, this answer assumed that reader
was a file handle rather than a CSV reader.
The CSV reader returns an iterable of iterables. I now suspect this is not the right approach, but if you want to split each cell of the CSV, you need to write
your_list=[
[r.split(cell) for cell in row]
for row in reader
]
Upvotes: 1