2015-01-10 6 views
-3

У меня есть список, который выглядит следующим образом:список Печать в файл

[u'first    ', u'second   '] 

Я хочу иметь файл, который выглядит следующим образом:

first second 

записи файлов в каждой строке должна быть вкладка разделителями , Вот что я сделал:

with open ('output','wb') as f1: 
    f1.write('COLUMN1'+'\t'+'COLUMN2'+'\n') 
     for element in mylist: 
      f1.write(element+'\t') 
     f1.write('\n') 

Файл выглядит нормально, когда я его открываю. Тем не менее, когда я открываю его в панд:

tmp=pd.read_csv('output',delimiter='\t') 
print tmp.head() 

все смешалось:

       COLUMN1      COLUMN2 
0 first      second       NaN 

Что я делаю неправильно?

ответ

0

Я бы рекомендовал использовать csv writer для создания csv. Например:

header = ['COLUMN1', 'COLUMN2'] 

mylist = [[u'first    ', u'second   '], 
      [u'val1    ', u'val2   ']] 

with open('out.csv', 'wb') as f: 
    csvwriter = csv.writer(f, delimiter='\t') 

    csvwriter.writerow(header) 
    for row in mylist: 
     csvwriter.writerow([c.strip() for c in row]) 


import pandas as pd 

tmp = pd.read_csv('out.csv', delimiter='\t') 

печати (TMP)

Это приводит к:

COLUMN1 COLUMN2 
0 first second 
1 val1 val2 

И если вы не хотите использовать CSV-файл, просто сделать это:

with open ('out.csv','w') as f1: 
    f1.write('COLUMN1'+'\t'+'COLUMN2'+'\n') 
    for row in mylist: 
     f1.write("\t".join(v.strip() for v in row) + "\n") 
+0

Нет, я все равно получаю тот же результат с моим файлом. Мой список - это поток списков. Я обрабатываю один список за раз и записываю его в файл (если это помогает). Это не файл, содержащий список списков. – Anastasia

+0

Это в основном то, что я уже предложил в своем ответе –

+0

Итак, можете ли вы привести пример своего файла? На этом этапе игра начинает гадать. – Marcin

1

Предполагая значения в столбцах сами по себе не содержат пробелов, вы можете использовать \s+, чтобы сделать 1-или-более пробельные шаблон регулярное выражение для разделителя между колонками:

In [87]: pd.read_table('output', delimiter=r'\s+') 
Out[87]: 
    COLUMN1 COLUMN2 
0 first second 

Таким образом, не создается никакого изменения в пути output может быть необходимым.

+0

OP создает выходной сигнал, не меняя его. –

+0

@PadraicCunningham: OP хотел изменить выход, потому что он считает, что необходимо разрешить pandas анализировать его в правильном DataFrame. Вышеприведенное показывает, что это необязательно. – unutbu

+0

в любом случае, создание вывода в виде файла с разделителями табуляции не должно работать? –

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