1

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

3
  • 1
    the structure of your CSV is strange, is you "comma" a comma or a semicolon? Commented Mar 28, 2019 at 12:06
  • I'm not clear how you would get from your input example to your expected result by 'splitting on e'. It looks like you have inserted a blank between a and b, and changed the comma between j and e into a semicolon? Commented Mar 28, 2019 at 12:12
  • yes the structure is with custom denominator (;). comma is comma, semicolon separates columns. This is exactly the challenge due to strange structure. Yes, I added an additional ; between a and b in order to show that I will have an additional column after split. Commented Mar 28, 2019 at 12:22

1 Answer 1

1

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
]
Sign up to request clarification or add additional context in comments.

3 Comments

Thanks. But I get this error File "main_python_csv.py", line 9, in <module> your_list=[r.split(x) for x in reader] File "main_python_csv.py", line 9, in <listcomp> your_list=[r.split(x) for x in reader] TypeError: expected string or bytes-like object
Fixed; an extra loop is required as the CSV reader returns a list of lists.
Yes great, it worked. The splitting is still not working like expected, but it is close to it

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.