Python:字符串附加在unicode问题的列表中

时间:2018-03-13 06:28:47

标签: python unicode beautifulsoup pyspark

我从一个用普通话写的网站上抓了一下。 (我使用Pyspark运行此代码)

lis=[]
ctype=soup.select_one('.car-type')
car_type=ctype.text
car_type=car_type.replace('\n', '').replace('\t','')
car_type1=car_type.split('[')[1].split(',')[0]
print(car_type1)
print(type(car_type1))
lis.append(car_type1)
print(lis)

以下是输出:

Z(76.9萬)

type 'unicode'

[u'Z(76.9\u842c)']

所以我从unicode转换为string。

lis=[]
ctype=soup.select_one('.car-type')
car_type=ctype.text
car_type=car_type.replace('\n', '').replace('\t','')
car_type1=car_type.split('[')[1].split(',')[0]
car_type1=car_type1.encode("utf-8")                //Conversion to utf-8 string
print(car_type1)
print(type(car_type1))
lis.append(car_type1)
print(lis)

以下是输出:

Z(76.9萬)

type 'str'

['Z(76.9\xe8\x90\xac)']

我不确定为什么每当我在lis中追加car_type1时,总会出现unicode问题。有什么方法可以解决吗?因为我需要将lis写入csv。谢谢!

1 个答案:

答案 0 :(得分:1)

car_type1对象是string对象或unicode对象不是问题。

在python中打印字符串时,您将获得对象的__str__方法的输出,即Z(76.9萬)

但是,列表的__str__方法的工作方式略有不同。它创建一个包含开始和结束括号[]的字符串,以及由列表中每个对象的__repr__方法生成的字符串。

简单地说,当你打印一个对象时,会调用__str__方法,而__str__方法的列表通过调用__repr__方法构造它的输出,如果它里面有字符串对象。

如果您希望它以您想要的方式工作,您可以通过以下方式执行此操作:

print '[' + ','.join("'" + str(l) + "'" for l in lis) + ']'

您可以通过以下方式轻松写入文件:

>>> # -*- coding: utf-8 -*-
>>> import io
>>>
>>> a = u'Z(76.9萬)'
>>> a
u'Z(76.9\u842c)'
>>> print a
Z(76.9萬)
>>> type(a)
<type 'unicode'>
>>> with io.open('/tmp/test', 'w') as file:
...     file.write(a)
... 
8L
>>> 

以下是文件的输出:

$ cat /tmp/test
Z(76.9萬)