Python 将列表打印到文件

Python 将列表打印到文件,python,pandas,Python,Pandas,我有一个如下列表: [u'first ', u'second '] first second 我想要一个如下所示的文件: [u'first ', u'second '] first second 每行中的文件条目应以制表符分隔。以下是我所做的: with open ('output','wb') as f1: f1.write('COLUMN1'+'\t'+'COLUMN2'+'\n'

我有一个如下列表:

[u'first              ', u'second         ']
first    second
我想要一个如下所示的文件:

[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')
当我打开文件时,它看起来很好。但是,当我在Pandas中打开它时:

tmp=pd.read_csv('output',delimiter='\t')
print tmp.head()
一切都一团糟:

                              COLUMN1                      COLUMN2
0  first                       second                         NaN

我做错了什么?

我建议使用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') 
printtmp

这导致:

  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")

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

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

因此,可能不需要更改创建输出的方式。

不,我的文件仍然得到相同的结果。我的列表是一个列表流,我一次处理一个列表,并将其写入文件(如果有帮助)。它不是一个包含列表列表的文件。所以你能提供你的文件的示例吗?现在这开始是一个猜测游戏。@Padraiccanningham您的anwser不建议使用csv模块。不知道你怎么能声称这基本上是我在回答中已经建议的?我已经建议剥离,OP说它不起作用,那么使用csv模块会有什么不同呢?@PadraicCunningham对于初学者来说,使用csv模块处理csv文件比重新发明轮子要好,和犯错误一样,OP显然在做。OP在创造输出,而不是改变it@PadraicCunningham:OP希望更改输出,因为他认为有必要允许pandas将其解析为适当的数据帧。上述情况表明,这是不必要的。无论哪种方式,将输出创建为制表符分隔的文件都应该有效。否?@padraiccnningham:当然可以。事实上,我夸大了事情,声称\s+会起作用。如果列中的值本身包含空格,则可能不起作用。