Stanis
Stanis

Reputation: 19

Split CSV with python based on regex findings

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

Answers (1)

Christoph Burschka
Christoph Burschka

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

Related Questions