2017-07-17 65 views
1

我有列表的列表:如何将列表列表写入cgi/python中的文件?

table = [] 
headers = ["JobId", "Name", "Start_Date", "End_Date", "Value"] 
table.append(headers) 
values1 = ['efwef', 'erwerw', '01', '02', 99] 
table.append(values1) 
values2 = ['efwsdfsef', 'erdwerw', '01'] 
table.append(values2) 

该表是列表的列表,其中每个列表具有不同长度的元件的所有元件可以是串

的index.cgi:

print "Content-Type: text/plain; charset=UTF-8" 
print "Content-Disposition: attachment; filename=test.txt" 
print 

for row in table: 
    for row_values in row: 
     if type(row_values) is not str: 
      row_values = str(row_values) 
     print row_values + '\t' 
    print '\n' 

但这打印:

JobId 
Name 
Start_Date 
End_Date 
Value 

efwef 
erwerw 
01 
02 
99 

.... ....

有人能告诉我我在做什么错吗?我试图取代“\ n”和打印“#########”我依然看到:

JobId 
    Name 
    Start_Date 
    End_Date 
    Value 
########################## 
    efwef 
    erwerw 
    01 
    02 
    99 
########################## 

即使我没有加“\ n”列表中的每个元素在印刷一条新线。

+0

注意,所有的值都是字符串。即使他们不是,你也可以在没有进一步测试和性能损失的情况下执行'row_values = str(row_values)'。 –

+1

'print'添加一个换行符。你应该考虑一次写完整行。 –

+0

@ Jean-FrançoisFabre哦..我没有意识到这一点。我认为印刷就像平常一样。新的CGI。 – user3407267

回答

2

print添加换行符。一种方式做你想要将print您在行一次使用str.join什么(也:请注意,所有的数据都是字符串,所以无需转换为字符串)

for row in table: 
    print("\t".join(row)) 

,如果你有一个整数/漂浮在是行不通的这样:

for row in table: 
    print("\t".join(map(str,row))) 

join了很好的接触,它并没有在字符串的末尾添加一个(没用)\t,你不必手动处理的。

但你可以做到这一点,使用csv模块(甚至非字符串列表的列表)一个更简单的方法,在一个行:

import csv,sys 

csv.writer(sys.stdout,delimiter="\t").writerows(table) 
+0

非常感谢!它现在有效! – user3407267

+0

它也适用于.csv文件吗? – user3407267

+0

谢谢!我试过写入文件的csv,但'\ t'似乎不能在csv文件中工作。我应该添加/更改打印“Content-Type:text/plain; charset = UTF-8” print“Content-Disposition:attachment; filename = test.csv” print – user3407267