【问题标题】:Why can't I join this tuple in Python?为什么我不能在 Python 中加入这个元组?
【发布时间】:2009-11-29 11:41:34
【问题描述】:
e = ('ham', 5, 1, 'bird')
logfile.write(','.join(e))

我必须加入它才能将其写入文本文件。

【问题讨论】:

  • 顺便说一句,你知道你可以不用括号写你的第一行吗?消除本质上的噪音是件好事。

标签: python tuples


【解决方案1】:

join 只接受字符串列表,所以先转换它们

>>> e = ('ham', 5, 1, 'bird')
>>> ','.join(map(str,e))
'ham,5,1,bird'

或者更pythonic

>>> ','.join(str(i) for i in e)
'ham,5,1,bird'

【讨论】:

  • 使用 str() 代替 repr() 会导致信息丢失。
  • 这取决于你的目的是什么,但str() 通常是你想向用户展示的东西(即在日志文件中,这是 OP 想要的)。
  • 确实如此。 str (str 或更好,unicode) 适用于人类。问题说明了一个用于人类的日志文件。所以在这种情况下,我认为 str() 比 repr.
  • 用户不读取日志文件;如果监督不足,他们会忽略它们,直到磁盘空间用完,然后将其删除。程序员在调查问题时必须阅读日志文件。证据模糊充其量是一个主要的烦恼。
  • logfile 只是对象名称。 (出于方便)。实际上,我确实希望人类阅读它们:)
【解决方案2】:

您最好先将元组转换为列表:

e = ('ham', 5, 1, 'bird') liste = list(e) ','.join(liste)

【讨论】:

    【解决方案3】:

    join() 仅适用于字符串,不适用于整数。使用','.join(str(i) for i in e)

    【讨论】:

    • 关于不带括号的元组的评论很棒。
    【解决方案4】:

    使用csv 模块。它将保存一个关于如何处理包含逗号的项目的后续问题,然后是另一个关于处理包含您用来引用/转义逗号的字符的项目的问题。

    import csv
    e = ('ham', 5, 1, 'bird')
    with open('out.csv', 'wb') as f:
        csv.writer(f).writerow(e)
    

    检查一下:

    print open('out.csv').read()
    

    输出:

    ham,5,1,bird
    

    【讨论】:

    • 看起来不必要的复杂。
    • @LS:一切都不是看起来的那样。简单地使用逗号分隔符而不用担心转义逗号等很快就会失效。
    猜你喜欢
    • 1970-01-01
    • 2010-10-25
    • 2011-04-07
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    相关资源
    最近更新 更多