【问题标题】:Write list items to a text file in Python在 Python 中将列表项写入文本文件
【发布时间】:2013-02-18 15:20:55
【问题描述】:

我有一个 - 可能 - 微不足道的问题一直困扰着我一段时间,但我仍然没有找到答案。我的许多脚本读取一些文件,比较它们的值并将它们保存在列表或字典中,然后我从中编写某种输出文件。我总是做的是,我遍历列表并将单个项目写入我的输出,用制表符、逗号或换行符分隔。我一直想知道的是如何防止在我的列表中的最后一项打印后出现分隔符。

这是一个例子:

dict1 = {a: [1,2,3], b: [4,5,6], c: [7,8,9]}
for key in dict1:
    outfile.write(key +": ")
    for item in dict1[key]:
        outfile.write(str(item) +", ")
    outfile.write("\n")

然后输出将如下所示:

a: 1, 2, 3, 
b: 4, 5, 6, 
c: 7, 8, 9, 

如何避免最后一个“,”?

【问题讨论】:

    标签: python list output


    【解决方案1】:

    使用str.join 方法和列表解析:

    for key, value in dict1.iteritems():
        outfile.write(key +": ")
        outfile.write(', '.join([str(item) for item in value]))
        outfile.write("\n")
    

    【讨论】:

    • 这行得通,但令 OP 感到惊讶的是,它不一定按关键顺序...例如,我得到 a、c、b...(但是他们没有说明这是一个明确的要求)
    • @JonClements 感谢您的评论。发生这种情况是因为列表理解还是仅仅因为字典不保留顺序?
    • 甚至可以选择outfile.write("%s: %s\n" % (key, ", ".join((str(item) for item in value))))
    • @JonClements 无论如何,它们从来都不是我期望的顺序。 ;-)
    【解决方案2】:

    使用标准库CSV 模块怎么样?

    它会处理这个问题,加上任何必要的转义符(如果您的值之一包含逗号怎么办?)

    (然后,当然,作为一般情况,使用string.join(list) 正确连接,不带尾随分隔符)

    【讨论】:

    • 我没有想到这一点,因为我很少需要 CSV 格式。我会看看的。 :-)
    猜你喜欢
    • 1970-01-01
    • 2020-04-20
    • 2014-11-22
    • 2019-03-21
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 2015-05-29
    • 2016-09-02
    相关资源
    最近更新 更多