如何将列表的列表写入 cgi/python 中的文件?
How to write list of list to a file in 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)
table是一个列表的列表,每个列表的元素长度不同,所有元素都可以是字符串
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' 列表中的每个元素都在新行中打印。
print
添加换行符。做你想做的一种方法是使用 str.join
一次 print
你的行(另外:请注意你所有的数据都是字符串,所以不需要转换为字符串)
for row in table:
print("\t".join(row))
如果你有 integers/floats 那是行不通的:
for row in table:
print("\t".join(map(str,row)))
join
的妙处在于它不会在字符串末尾添加(无用的)\t
,您无需手动处理。
但是您可以使用 csv
模块(即使使用非字符串列表的列表)以更简单的方式在一行中完成:
import csv,sys
csv.writer(sys.stdout,delimiter="\t").writerows(table)
我有一个清单:
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)
table是一个列表的列表,每个列表的元素长度不同,所有元素都可以是字符串
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' 列表中的每个元素都在新行中打印。
print
添加换行符。做你想做的一种方法是使用 str.join
一次 print
你的行(另外:请注意你所有的数据都是字符串,所以不需要转换为字符串)
for row in table:
print("\t".join(row))
如果你有 integers/floats 那是行不通的:
for row in table:
print("\t".join(map(str,row)))
join
的妙处在于它不会在字符串末尾添加(无用的)\t
,您无需手动处理。
但是您可以使用 csv
模块(即使使用非字符串列表的列表)以更简单的方式在一行中完成:
import csv,sys
csv.writer(sys.stdout,delimiter="\t").writerows(table)