2016-04-08 2 views
0

У меня есть файл с именем Some.csv, который имеет поле (столбец), который имеет значение, какCSV читатель различные выходы на Ubuntu и Windows - Python

1000, 2000, .... 39000.

Я хотел только файлы с 39000, поэтому я написал следующий сценарий питона

import os 
import csv 

with open('Somenew.csv', 'w') as fw: 
    writr = csv.writer(fw, delimiter=',') 
    with open('Some.csv','r') as fr: 
    reader = csv.reader(fr, delimiter = ',') 
    for row in reader: 
     if row[2] == '39000': writr.writerow(row) 

Теперь, когда это выполняется на Windows, она Somenew.csv выглядит следующим образом

ххого хххй, 39000, хххй ххое

гггг, гггг, 39000, гггг, гггг

Но при выполнении на Linux (Ubuntu 14.04LTS) есть не добавлена ​​никакая дополнительная новая строка.

Есть ли причина для этого? Возможно, это из-за компилятора?

+0

Это потому, что Windows использует '\ r \ n' для окончаний строк в текстовых файлах вместо' \ n'. Простое исправление заключается в том, чтобы читать и записывать CSV-файлы в виде двоичных файлов, но есть и другие варианты в Python 3. Какую версию Python вы используете? –

+2

http://stackoverflow.com/questions/1170214/pythons-csv-writer-produces-wrong-line-terminator/1170297#1170297 – LearnerEarner

+0

2.7.something (возможно, 10). Спасибо, что имеет смысл. Так измените 'r' и 'w' на 'rb' и 'wb'? – Sood

ответ

1

Вы должны использовать режим wb для csv файлов, если вы используете Python 2.x:

https://docs.python.org/2/library/csv.html#csv.writer

Если csvfile является объектный файл, он должен быть открыт с «Ъ» флагом где это имеет значение.

0

Попробуйте открыть файл в двоичном режиме. This ответ может помочь.

Смежные вопросы