【问题标题】:convert list to string separated by ','in python 3.7在python 3.7中将列表转换为用','分隔的字符串
【发布时间】:2019-06-24 15:01:18
【问题描述】:

我已将 python 从 2.7 升级到 3.7。

在 2.7 中,我愿意

",".join(my_list)

从列表转换为字符串,但是在 3.7 中,我有一个错误:

{TypeError}sequence item 0: expected str instance, bytes found

我该怎么做?

我已经尝试添加

b','.join(mylist)

但它返回一个错误:

{TypeError}sequence item 1: expected a bytes-like object, str found

示例:

mylist = ['try' , 'to' , 'be' , 'string']

output = 'try,to,be,string'

【问题讨论】:

  • 您的列表来自哪里?一个文件?
  • 只要把','.join(mylist)去掉b
  • @DeveshKumarSingh 没有解决这个问题。他们已经在这样做了。
  • 连接不是我认为的问题,你的数据不是你想的那样。
  • 试试 ",".join(list)

标签: python string list python-3.7


【解决方案1】:

只需删除b,仅当您的列表项也是二进制字符串时才需要它。

mylist = ['try' , 'to' , 'be' , 'string']
print( ','.join(mylist) )

输出:

try,to,be,string

但你必须确保不要混合 str 和 binary-str 项:

mylist = ['try' , b'to' , 'be' , 'string']
print( ','.join(mylist) )

输出:

TypeError: sequence item 1: expected str instance, bytes found

【讨论】:

  • print( ','.join([str(a) for a in mylist])) 应该可以解决问题
  • @E.Serra 它将防止异常,但它会打印文字"b'to'",因此输出将是try,b'to',be,string - 恕我直言,最好清理输入而不是静默防止异常和然后想知道垃圾输出是从哪里来的。
  • 当然,但是 OP 想知道为什么它会崩溃,不要认为他很快就会接近生产 :)
  • @E.Serra 为什么不print(','.join(a if isinstance(a, str) else a.decode() for a in mylist))
【解决方案2】:

所以实际上旧版本对我有用

','.join(mylist)

我认为您的问题是您的字符串之一是字节对象...在字节和字符串之间您可以使用 .encode 和 .decode 进行转换

【讨论】:

    【解决方案3】:

    我认为我的情况与 OP 类似:使用 Python 3.7,我正在逐行读取以二进制模式打开的文件,因此我获得了二进制字符串列表。

    在我的例子中,这些行是 JSON 对象(每行一个):我需要将它们放入 JSON 数组并解析它们。为此,我必须将每一行解码为一个字符串:

    json_obj = json.loads(
        "[" + ",".join(map(lambda l: l.decode(), file.readlines())) + "]"
    )
    

    在这个 sn-p 中,file.readlines() 生成一个 b''(二进制字符串)列表,我使用 map() 对它们每个调用 .decode() 以将其转换为 utf8 字符串,所以join() 可以完成它的工作。

    这种方法也适用于列表中的混合类型(字符串和二进制),但您需要实现自定义decode()

    def decode(arg):
        try:
            return arg.decode()
        except:
            pass
        return arg
    
    json_obj = json.loads(
        "[" + ",".join(map(lambda l: decode(l), file.readlines())) + "]"
    )
    

    【讨论】:

      猜你喜欢
      • 2010-10-19
      • 1970-01-01
      • 2015-07-12
      • 2021-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      相关资源
      最近更新 更多