2015-03-11 4 views
-1

У меня есть файл csv с 4 столбцами и вы хотите создать список массивов python, причем каждая строка csv является массивом.Чтение строк csv как массивы - python

Я могу получить каждую строку как массив, но проблема в том, что массив начинается и заканчивается кавычками.

формат данных

резюме:

User Link,Reputation,DisplayName,Location 
353410,"47245","John Doe","Uruguay" 
927034,"46782","Jane Doe","Bahia Blanca, Argentina" 

Это один из кодов я пытался:

with open('Query_SO_Arg.csv', 'rb') as csvfile: 
    so = csv.reader(csvfile, delimiter=',', quotechar='"') 
    so_data = [] 
    so.next() 
    for row in so: 
     so_data.append(row) 
    print so_data 

Это выход я получаю:

[['353410,"47245","John Doe","Uruguay";'], ['927034,"46782","Jane Doe","Bahia Blanca, Argentina";'], ['62024,"41775","Jim Doe","Buenos Aires, Argentina";'], 

Как я могу построить эта структура, но без внешнего ", поэтому я могу работать с данными?

Спасибо!

EDIT:

Это данные в новый файл CSV (с той же структурой, что и исходный):

User Link,Reputation,DisplayName,Location 
60000,"40000","Diego K","Buenos Aires, Argentina" 
240000,"37000","Claudio R","Buenos Aires, Argentina" 

Это выход я получаю (с той же старой цитата проблемы):

[['60000,"40000","Diego K", "Buenos Aires, Argentina"'], ['240000,"37000","Claudio R","Buenos Aires, Argentina"']] 

EDIT 2 , если я использую следующий код:

so = csv.reader(csvfile, delimiter=',', quotechar='"') 
for row in so: 
    print ', '.join(row) 

я получаю:

User Link, Reputation, DisplayName, Location 
60000,"40000","Diego K","Buenos Aires, Argentina" 
240000,"37000","Claudio R","Buenos Aires, Argentina" 

данные, кажется, в порядке, за исключением, что нет никаких списков. Означает ли это какое-либо представление о том, почему я не могу правильно переходить к строительным спискам?

EDIT 3: Per @MartijinPieters любезного запроса Я отправляю следующий код:

print repr(open('So_fake_data_test.csv', 'rb').read()) 

, который выводит:

'User Link,Reputation,DisplayName,Location\r\n"60000,""40000"",""Diego K"",""Buenos Aires, Argentina"""\r\n"240000,""37000"",""Claudio R"",""Buenos Aires, Argentina"""\r\n' 

Благодарности @MartijinPieters

EDIT 4

CSV screeshot

Надеюсь, это поможет. Еще раз спасибо.

+0

Этот код не должен указывать на этот вывод. – DSM

+1

Я не могу воспроизвести вашу проблему. Я отмечаю, что ваш вывод включает в себя * точки с запятой *, которые у вашего ввода нет. –

+0

Все, что вам нужно сделать, это использовать 'list (csv.reader (csvfile))', чтобы получить список списков; диалектическая конфигурация по умолчанию * достаточно *. –

ответ

0

Наконец я нашел решение.

Поврежденная проблема не связана с кодом или данными, а с тем, как Excel сохраняет исходные загруженные данные.

Это то, что я делал: загрузил файл csv с исходными данными, открыл его в Excel и сохранил его как узнаваемое имя.

Это решение Я нашел: загрузите файл csv, перейдите в Проводник Windows и переименуйте файл.

С помощью этой основной операции и следующего кода все работает отлично:

so = csv.reader(csvfile, delimiter=',', quotechar='"') 
so = list(so) 

Спасибо за все ваши входы, специально для @MartijnPieters!

0

это работает для меня (Python 3.4):

import csv 
with open('Query_SO_Arg.csv', 'r') as csvfile: 
    so = csv.reader(csvfile, delimiter=',', quotechar='"') 
    so_data = [] 
    for row in so: 
     so_data.append(row) 

    print(so_data[1:]) 

Выход:

[['353410', '47245', 'John Doe', 'Uruguay '], ['927034', '46782', 'Jane Doe', 'Bahia Blanca, Argentina ']] 
+0

Спасибо @ dm295. Я получаю тот же результат (с кавычками). Я использую python 2.7, хотя я не думаю, что проблема здесь. – Diego

+0

@diego - наши выходы не совпадают - у вас есть списки только с одним элементом, у моих списков вывода есть 4 элемента. – dm295

+0

Спасибо, я имел в виду, что когда я запускаю свой код, я получаю отличный результат, чем то, что вы получаем. Я все еще получаю неудовлетворительный результат (с кавычками). Это проблема, которая возникает с каждым предложенным решением. Я не уверен, в чем проблема. – Diego

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