34

I need to read a CSV file which has fields that have a comma, so I have double quoted the fields which contains commas, such as:

1, "text1,text2", "text3, text4", a, b, c

But when I try to read the file in Python I get the fields separated by the commas, as following:

row[0] = 1
row[1] = text1
row[2] = text2
row[3] = text3
row[4] = text4
row[5] = a
row[6] = b
row[7] = c

I am reading the CSV file with the following code:

info = csv.reader(open('./info.csv'))  
for row in info :
    print row[0] + " * " + row[1] ...

Is it possible to read double quoted fields which contains a comma?

2 Answers 2

46

The Python csv module actually does support quoted fields, even by default. Your problem here is that Python by default does not skip the space, so you need to use skipinitialspace=True.

>>> s = StringIO.StringIO('1, "text1,text2", "text3, text4", a, b, c')
>>> list(csv.reader(s, skipinitialspace=True))
[['1', 'text1,text2', 'text3, text4', 'a', 'b', 'c']]
Sign up to request clarification or add additional context in comments.

3 Comments

csv.Sniffer().sniff(s).__dict__ would indicate it too: {'__doc__': None, '__module__': 'csv', '_name': 'sniffed', 'delimiter': ',', 'doublequote': False, 'lineterminator': '\r\n', 'quotechar': '"', 'quoting': 0, 'skipinitialspace': True}
idk how but you should be paid for this answer.. :D thanks Sven Marnach this just solved my problem.. God bless you
@AssadAli Thanks for the kind words. I'm glad this answer helps.
2

You need to use a DictReader on the file content.

The result looks like this

import csv

with open(file_name, mode ='r', encoding='utf-8') as file:
  # reading the CSV file
  csvFile = csv.DictReader(file)
  # displaying the contents of the CSV file
  for line in csvFile:
    print(line["myAttribute"]

Comments

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.