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?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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']]
Method 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"]
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0