我从一个用普通话写的网站上抓了一下。 (我使用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。谢谢!
答案 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萬)