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+会起作用。如果列中的值本身包含空格,则可能不起作用。