打印列表到文件

时间:2015-01-10 01:23:33

标签: python pandas

我有一个如下所示的列表:

[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

我做错了什么?

2 个答案:

答案 0 :(得分:1)

假设列中的值本身不包含空格,您可以使用\s+为列之间的分隔符设置 1或更多空格正则表达式模式:

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

因此,可能无需更改output的创建方式。

答案 1 :(得分: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")