CharlieSmith
CharlieSmith

Reputation: 321

Saving a csv with excel so python can append rows correctly

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

Answers (1)

Robᵩ
Robᵩ

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

Related Questions