【问题标题】:Saving lists in python as semicolon delimited text file将python中的列表保存为分号分隔的文本文件
【发布时间】:2018-10-30 06:17:44
【问题描述】:

我在 Python 中有三个列表。我想将这些列表保存为分号分隔的文本文件(带有标题)。

例如,让我们考虑以下三个列表:

l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
l2 = [1,2,3,4,5]
l3 = [20.0, 25.1, 51.2, 60.2, 75.0]

和标题,['Label1', 'Label2', 'Label3']

我希望将这些列表保存为文本文件中的列,格式如下:

Label1; Label2; Label3
a1;1;20.0%
a2;2;25.1%
a3;3;51.2%
a4;4;60.2%
a5;5;75.0%

除了以上述格式保存文件外,我还想在写最后一列时有百分比符号。我检查了this 的帖子,但我仍然对如何实现这一点感到困惑。我正在使用 python 2.7。

我将非常感谢任何帮助。

【问题讨论】:

  • 节省 0.2 而不是 20% 不是更有用吗?
  • timgeb:谢谢你的建议。我很想听从你的建议。但是,我需要在这里遵守既定的标准。
  • 为什么标题行有多余的空格?

标签: python python-2.7 save


【解决方案1】:

以下将起作用,使用csv 模块和zip

l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
l2 = [1,2,3,4,5]
l3 = [20.0, 25.1, 51.2, 60.2, 75.0]
header = ['Label1', 'Label2', 'Label3'] 

import csv

with open('output.csv', 'w') as f:
    w = csv.writer(f, delimiter=';')
    w.writerow(header)
    for row in zip(l1, l2, (str(x)+'%' for x in l3)):
        w.writerow(row)

【讨论】:

    【解决方案2】:
    l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
    l2 = [1,2,3,4,5]
    l3 = [20.0, 25.1, 51.2, 60.2, 75.0]
    answer = ''
    for i in range(len(l1)):
        value = "{0};{1};{2}%".format(l1[i], l2[i], l3[i])
        answer = answer+"\n"+value
    
    header = ['Label1', 'Label2', 'Label3'] 
    title = ';'.join(header)
    answer = title + answer
    print(answer)
    
    file = open("answer.txt","w") 
    file.write(answer)
    file.close()
    

    【讨论】:

    • 代替打印写入文件
    • Alfred Ayi-bonte:感谢您的回答。如何将此字符串“答案”保存为文本文件?另外,我想将标题保留为文本文件中的第一行。我该怎么做?
    • @Ross 使用 ``` file = open("answer.txt","w") file.write(answer) file.close()`` 写出你的答案
    【解决方案3】:

    您可以使用zip 转置您的行,然后使用csv 模块处理它们。

    >>> import csv
    >>> l1 = ['a1', 'a2', 'a3', 'a4', 'a5']
    >>> l2 = [1,2,3,4,5]
    >>> l3 = [20.0, 25.1, 51.2, 60.2, 75.0]
    >>> l3_percent = ['{!r}%'.format(x) for x in l3]
    >>> header = ['Label1', 'Label2', 'Label3']
    >>> rows = zip(l1, l2, l3_percent)
    >>>
    >>> with open('out.csv', 'w') as f:
    ...:    writer = csv.writer(f, delimiter=';', quoting=csv.QUOTE_NONE)
    ...:    writer.writerow(header)
    ...:    writer.writerows(rows)
    

    这会产生

    标签1;标签2;标签3
    a1;1;20.0%
    a2;2;25.1%
    a3;3;51.2%
    a4;4;60.2%
    a5;5;75.0%

    【讨论】:

    • timgeb:非常感谢。你的建议效果很好。 :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多