【问题标题】:How to write list of list to a file in cgi/python?如何将列表列表写入 cgi/python 中的文件?
【发布时间】:2017-12-21 16:30:33
【问题描述】:

我有一个列表:

 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' 列表中的每个元素都在新行中打印。

【问题讨论】:

  • 请注意,您的所有值都是字符串。即使不是,您也可以直接执行row_values = str(row_values),而无需进一步测试和性能损失。
  • print 添加一个换行符。你应该考虑一次写整行。
  • @Jean-FrançoisFabre 哦.. 我没有意识到这一点。我认为打印就像平常一样。 cgi 新手。

标签: python python-2.7 list file cgi


【解决方案1】:

print 添加一个换行符。做你想做的事情的一种方法是使用str.join 一次print 你的行(另外:注意你所有的数据都是字符串,所以不需要转换为字符串)

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)

【讨论】:

  • 谢谢!我尝试了它写入文件的 csv,但 '\t' 似乎在 csv 文件中不起作用。我应该添加/更改打印“Content-Type: text/plain; charset=UTF-8” print“Content-Disposition: attachment; filename=test.csv” print
  • 制表符分隔的文件,如我正在创建的文件并不是真正的 csv,它们被称为“tsv”(制表符分隔文件)。如果这对您来说不是问题,您可以尝试使用分号或逗号。
猜你喜欢
  • 1970-01-01
  • 2014-06-27
  • 2020-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多