2017-07-17 109 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

相關問題