Calculus
Calculus

Reputation: 781

Python CSV writer keeps adding unnecessary quotes

I'm trying to write to a CSV file with output that looks like this:

14897,40.50891,-81.03926,168.19999

but the CSV writer keeps writing the output with quotes at beginning and end

'14897,40.50891,-81.03926,168.19999'

When I print the line normally, the output is correct but I need to do line.split() or else the csv writer puts output as 1,4,8,9,7 etc...

But when I do line.split() the output is then

['14897,40.50891,-81.03926,168.19999']

Which is written as '14897,40.50891,-81.03926,168.19999'

How do I make the quotes go away? I already tried csv.QUOTE_NONE but doesn't work.

with open(results_csv, 'wb') as out_file:
            writer = csv.writer(out_file, delimiter=',')
            writer.writerow(["time", "lat", "lon", "alt"])

            for f in file_directory):
                for line in open(f):
                    print line                        
                    line = line.split()
                    writer.writerow(line)

Upvotes: 2

Views: 589

Answers (2)

Jean-François Fabre
Jean-François Fabre

Reputation: 140168

with line.split(), you're not splitting according to commas but to blanks (spaces, linefeeds, tabs). Since there are none, you end up with only 1 item per row.

Since this item contains commas, csv module has to quote to make the difference with the actual separator (which is also comma). You would need line.strip().split(",") for it to work, but...

using csv to read your data would be a better idea to fix this:

replace that:

for line in open(some_file):
   print line                        
   line = line.split()
   writer.writerow(line)

by:

with open(some_file) as f:
  cr = csv.reader(f)  # default separator is comma already
  writer.writerows(cr)

Upvotes: 1

Lakshmikant Deshpande
Lakshmikant Deshpande

Reputation: 844

You don't need to read the file manually. You can simply use csv reader. Replace the inner for loop with:

# with ensures that the file handle is closed, after the execution of the code inside the block

with open(some_file) as file:
    row = csv.reader(file)  # read rows
    writer.writerows(row)   # write multiple rows at once

Upvotes: 0

Related Questions