如何将* any * Python对象转换为字符串?

时间:2015-12-17 16:52:41

标签: python utf-8

我想将各种Python对象的列表连接成一个字符串。对象可以是字面上的任何东西。我想我可以使用以下代码完成此操作:

.encode('utf-8')

但不幸的是,有时会给我一个UnicodeEncodeError:

' '.join([x.encode('utf-8') for x in the_list])

this SO answer我发现有人说我需要使用int,所以我将代码更改为:

AttributeError: 'int' object has no attribute 'encode'

但是如果对象不是字符串或unicodes但是例如.encode('utf-8'),我得到str()。所以这意味着我需要使用某种if语句来检查它是什么类型以及如何转换它。但是我应该何时使用.bashrc,何时应该使用Runtime.getRuntime().exec(new String[] { "/bin/bash", "-c", "update-logbot" });

如果我还可以为此做一些oneliner会更好,但我不知道怎么做?还有其他人知道吗?欢迎所有提示!

3 个答案:

答案 0 :(得分:6)

Python 2.x使用repr()。如果你不在结果中使用非ASCII Unicode,那么Python 3.x会使用repr(),如果你这样做,则使用ascii()

>>> a=1             # integer
>>> class X: pass
...
>>> x=X()           # class
>>> y='\u5000'      # Unicode string
>>> z=b'\xa0'       # non-ASCII byte string
>>> ' '.join(ascii(i) for i in (a,x,y,z))
"1 <__main__.X object at 0x0000000002974B38> '\\u5000' b'\\xa0'"

2.X和3.X repr()和3.X ascii()之间差异的示例:

>>> # Python 3
>>> s = 'pingüino' # Unicode string
>>> s
'pingüino'
>>> repr(s)
"'pingüino'"
>>> print(repr(s))
'pingüino'
>>> ascii(s)
"'ping\\xfcino'"
>>> print(ascii(s))
'ping\xfcino'    

>>> # Python 2
>>> s = u'pingüino'
>>> s
u'ping\xfcino'
>>> repr(s)
"u'ping\\xfcino'"
>>> print(repr(s))
u'ping\xfcino'

答案 1 :(得分:1)

您可以尝试join使用unicode对象..

u' '.join(unicode(x) for x in thelist)

或者之前你所拥有的将在python3中正常工作。请务必:

  1. 早期解码
  2. 到处都是unicode
  3. 编码迟到
  4. 有关详细信息,请参阅this talk

答案 2 :(得分:0)

您可以尝试将三元运算符与当前的单行运算符结合使用。此外join对于生成器也可以正常工作,因此我认为您不需要创建列表。像

这样的东西
' '.join(x.encode('utf-8') if isinstance(x, basestring) else str(x)
         for x in the_list)