python踩过的一些坑

版权声明:本文为博主原创文章,转载请标明原文地址,谢谢 ^_^ https://blog.csdn.net/xiaoquantouer/article/details/78731709

找完工作,又开始忙于做毕设,很久没更新博客了,不过博客新上线的这个新界面太不好用了,分类下只有两篇文章,每次点击进去都出现很多篇其他类的,每次找一篇博文都要翻很久。体验真是极差。


废话不多说,先记几个做毕设过程中发现的小坑


1、jieba分词生成迭代器,在第二次for循环会失效

测试代码:



用jieba分词生成的word_list是个迭代器,第二个for里面就已经失效了,所以什么都打印不出来,所以为了让它不失效,用word_list1 = list(word_list)将其转化为list即可。


2、list在生成二维数组时,注意值的浅拷贝

问题发现

>>> a = [[0] * 3] * 3
>>> a
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> a[1][1] = 1
>>> a
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]
>>>

创建了一个3*3的二维数组a,初始化所有值都为0,现在想将a[1][1]值改为1,发现所有行的下标为1的值都改为了1

原因:[0]*3是生成一个1*3的一维数组,初始化所有值为0,现在对这个一维数组再*3,企图生成一个二维数组时,实际上用到的是浅拷贝,就是说这三个[0]*3用到的一个内存,所以任何一维数组中有值修改了,另外两个一维数组中对应地方的值都会跟着变(因为用的是一个内存,可以理解为本来就是指向同一个数)。

正确的生成二维数组的方式如下:

>>> a = [[] for i in range(3)]
>>> a
[[], [], []]
>>> a[0].append(0)
>>> a[1].append(0)
>>> a[2].append(0)
>>> a
[[0], [0], [0]]
>>> a[1][0] = 1
>>> a
[[0], [1], [0]]


3、在python的工程中,文件的命名千万不要使用包的名字。当你出现报错提示你import的包不存在时,看看你的文件命名是否有问题!


4、处理微博数据时,在遇到表情时,utf-8编码的文本是可以打印出来不报错的,但是在存储到数据库中会报错。这时需要对其进行处理

处理方案是:将其先通过encode转化为gbk编码,因为gbk编码不能表示表情,在转码时会报错。选择errors = 'ignore',然后再decode回utf-8,这时文本中表情已经去掉了

str = str.encode("gbk", errors="ignore")
str = str.decode("gbk")


在用到

str.encode(encoding='UTF-8',errors='strict')

这个函数时,如果想直接将表情从文本中去掉,选择errors='ignore'即可。

errors参数如下:

 'ignore', 'replace', 'xmlcharrefreplace', 'backslashreplace' 以及通过 codecs.register_error() 注册的任何值。

可参考网址:http://www.runoob.com/python/att-string-encode.html




猜你喜欢

转载自blog.csdn.net/xiaoquantouer/article/details/78731709