Reputation: 321
When ever I save a csv file from excel (Mac version 15.17) appending new rows with python doesn't work as desired
e.g.I save this file in excel:
col1 col2 col3
-----------------
1234 1234 1234
1234 1234 1234
and I append these lines with python
5678 5678 5678
5678 5678 5678
I get:
col1 col2 col3
1234 1234 1234
1234 1234 12345678 5678 5678
5678 5678 5678
As if excel misses off the last line break. Is there a way to get around this without manually adding (with code) a line break at the end of every excel file.
Opening the file with a text editor and adding a line break fixes the problem but that's a horrible work around.
Code used in python to append a line to the csv:
with file(append_to_this_csv.csv, 'a') as writefile:
writer = csv.writer(writefile)
row = [[5678,5678,5678]]
writer.writerows(row)
Upvotes: 0
Views: 838
Reputation: 168646
Try adding in the trailing newlines in your Python script instead of using a text editor:
def fix_trailing_newline(fname):
with open(fname, "r+") as f:
f.seek(-1, 2)
if(f.read() != '\n'):
f.seek(0, 2)
f.write('\n')
Alternatively, you can change how you append rows to a csv file. You could read in the entire file, append your rows in memory, and then write the entire file:
def append(fname, data):
with open(fname) as f:
reader = csv.reader(f)
data = list(reader) + list(data)
with open(fname, 'w') as f:
writer = csv.writer(f)
writer.writerows(data)
Upvotes: 1