关于python3 编码问题的问题

XPath 与多线程爬虫
捣鼓了2天,LXML的ETREE还是无法使用。还是先说下配置吧,WIN10 64位,PYTHON3.5.0,PYCHARM 4.0.5,是根据老师给的页面下的LXML3.4.4 FOR PY35
64位的插件包安装的,目前在SETTINGS里能看到提示3.4.4升级3.5.0,但是直接升级会出错,从DETAIL里给出的信息是 :Using build configuration of libxslt
running install
running build
running build_py
copying srclxmlincludeslxml-version.h -& buildlib.win-amd64-3.5lxmlincludes
running build_ext
building 'lxml.etree' extension
error: Unable to find vcvarsall.bat
----------------------------------------
Failed building wheel for lxmlCommand "C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe -c "import setuptools,__file__='C:UsersAdministratorAppDataLocalTemppycharm-packaging0.tmplxmlsetup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('rn', 'n'), __file__, 'exec'))" install --record C:UsersADMINI~1AppDataLocalTemppip-dzn420g2-recordinstall-record.txt --single-version-externally-managed --compile --user --prefix=" failed with error code 1 in C:UsersAdministratorAppDataLocalTemppycharm-packaging0.tmplxml貌似说是VS的问题?我找到了LXML的官方,用了以下的代码try:from lxml import etreeprint("running with lxml.etree")except ImportError:try:# Python 2.5import xml.etree.cElementTree as etreeprint("running with cElementTree on Python 2.5+")except ImportError:try:# Python 2.5import xml.etree.ElementTree as etreeprint("running with ElementTree on Python 2.5+")except ImportError:try:# normal cElementTree installimport cElementTree as etreeprint("running with cElementTree")except ImportError:try:# normal ElementTree installimport elementtree.ElementTree as etreeprint("running with ElementTree")except ImportError:print("Failed to import ElementTree from any known place")
出来的结果是C:UsersAdministratorAppDataLocalProgramsPythonPython35python.exe I:/pythons/pytest/xpathtest.pyrunning with lxml.etree&Element html at 0x1a620ebb888&Process finished with exit code 0这个真晕掉了。
12月26日 回答
你有没有尝试过使用pip install lxml 或者easy_install lxml 的方式安装?
12月28日 回答
试过的老师。。下图是PIP INSTALL 安装的错误提示。并且我也百度了一些方案,包括指定VS版本。貌似现在微软上安装只有VS2015吧。我尝试过加注册表指定vcvarsall.bat,包括在PYTHON的环境变量下 修改
toolskey = “VS140COMNTOOLS” 都无效。
12月28日 回答
你装Python 的库,关VS什么事,是你的电脑缺少VC++运行库。你需要安装visual c ++2010库。这个有一个单独的文件可以安装,不需要装vs。换个搜索引擎吧,BAT 现在只剩AT了,渣度搜不了正经的东西。
12月30日 回答
@ 很不幸的是,我安装了VC2015了。配置是 WIN10 64位,PYTHON3.5,VC2015是通过VS2015整体安装的,包括SDK。不仅是VC2015,我看了下程序,甚至包括有 2008 电脑里一直都有的。现在VCVARSALL.BAT错误消失了,但是替代的错误是 srclxmlincludesetree_defs.h(14):fatal error c1083:无法打开包括文件:"libxml/xmlversion.h":no such file or directory.结果是一样的,安装不上。如果用PIP或者复制方式强制安装。依旧无法使用ETREE。
XPath 与多线程爬虫
服务热线:400-678-8266下次自动登录
现在的位置:
& 综合 & 正文
关于linux下python的升级和安装软件时遇到对python2.4的依赖问题
*******************************************************************************
python的升级:
***************************************************************************************************************
1.查看python的版本
(1).[root@localhost ~]# python
Python <span style="color:#c0.3
由此可知默认的python是2.4.3的,需要将python2.4升级到2.6版本
2.下载Python2.6.7.tar.bz2
(1).$tar jxvf
Python2.<span style="color:#c0.tar.bz2
(2).$cd Python2.<span style="color:#c0
(3).$./configure
(4).$make && make install
自此,python2.6安装后路径默认是在/usr/local/lib/python2.6
查看Python版本:
$ python --version (-V)
建立软连接,使系统默认的python指向python2.6
正常情况下即使python2.6安装成功后,系统默认指向的python仍然是2.4.3版本,考虑到yum是基于python2.4.3才能正常工作,不敢轻易卸载。
如何实现将系统默认的python指向到2.6版本呢?
mv /usr/bin/python
/usr/bin/python.bak (自己创建)
检验python指向是否成功:
/usr/bin/python
**********************************************************************************************************************
python2.4的依赖问题
**********************************************************************************************************************
在安装软件或系统更新软件时,系统报错:需要依赖python2.4,原因是你系统自带python版本过高或者你的python已经更新到更高版本
解决办法:重新安装python2.4
详细步骤如下:
# wget http://www.python.org/ftp/python/2.4.1/Python-2.4.1.tgz
# tar -zxvf Python-2.4.1.tgz
# cd Python-2.4.1
# ./configure -prefix=/usr/local/python-2.4.1
# make install
# mv /usr/bin/python /usr/bin/python-2.4.1
# ln -s /usr/local/python-2.4.1/bin/python /usr/bin/python
OK,Python2.4 安装完成了。
&&&&推荐文章:
【上篇】【下篇】在Python中关于中文编码问题的处理建议
投稿:goldensun
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了几种在Python中关于中文编码问题的处理方法,包括在使用Unicode编码时碰到的异常等,需要的朋友可以参考下
字符串是Python中最常用的数据类型,而且很多时候你会用到一些不属于标准ASCII字符集的字符,这时候代码就很可能抛出UnicodeDecodeError: 'ascii' codec can't decode byte 0xc4 in position 10: ordinal not in range(128)异常。这种异常在Python中很容易遇到,尤其是在Python2.x中,是一个很让初学者费解头疼的问题。不过,如果你理解了Python的Unicode,并在编码中遵循一定的原则,这种编码问题还是比较容易理解和解决的。
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。但是,Python 2.x的默认编码格式是ASCII,就是说,在没有指定Python源码编码格式的情况下,源码中的所有字符都会被默认为ASCII码。也因为这个根本原因,在Python 2.x中经常会遇到UnicodeDecodeError或者UnicodeEncodeError的异常。
关于Unicode
Unicode是一种字符集,它为每一种现代或古代使用的文字系统中出现的每一个字符都提供了统一的序列号,规定了符号的二进制代码,但没有规定这个二进制代码应该如何存储。也就是说:Unicode的编码方式是固定的,但是实现方式根据不同的需要有跟多种,常见的有UTF-8、UTF-16和UTF-32等。更多的介绍大家可以参看维基百科:Unicode
为了能够处理Unicode数据,同时兼容Python某些内部模块,Python 2.x中提供了Unicode这种数据类型,通过decode和encode方法可以将其它编码和Unicode编码相互转化,但同时也引入了UnicodeDecodeError和UnicodeEncodeError异常。。
常见的几种编码异常
Python中常见的几种编码异常有SyntaxError: Non-ASCII character、UnicodeDecodeError和UnicodeEncodeError等。下面依次举例说明一下:
1、SyntaxError: Non-ASCII character
这种异常最不容易出现,也最容易处理,主要原因是Python源码文件中有非ASCII字符,而且同时没有声明源码编码格式,例如:
s = '中文'
# 抛出异常
2、UnicodeDecodeError
这个异常有时候会在调用decode方法时出现,原因是Python打算将其他编码的字符转化为Unicode编码,但是字符本身的编码格式和decode方法传入的编码格式不一致,例如:
#!/usr/bin/python
# -*- coding: utf-8 -*-
s = '中文'
s.decode('gb2312') # UnicodeDecodeError: 'gb2312' codec can't decode bytes in position 2-3: illegal multibyte sequence
上面这段代码中字符串s的编码格式是utf-8,但是在使用decode方法转化为Unicode编码时传入的参数是‘gb2312',因此在转化的时候抛出UnicodeDecodeError异常。还有一种情况是在encode的时候:
#!/usr/bin/python
# -*- coding: utf-8 -*-
s = '中文'
s.encode('gb2312') # UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
3、UnicodeEncodeError
错误的使用decode和encode方法会出现这种异常,比如:使用decode方法将Unicode字符串转化的时候:
#!/usr/bin/python
# -*- coding: utf-8 -*-
s = u'中文'
s.decode('utf-8') # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
当然,除了上面列出的几种出现异常的情况之外还有很多可能出现异常的例子,这里就不在一一说明了。
对于以上的几个异常,有以下几个处理的方法和原则。
1、遵循PEP0263原则,声明编码格式
在PEP 0263 -- Defining Python Source Code Encodings中提出了对Python编码问题的最基本的解决方法:在Python源码文件中声明编码格式,最常见的声明方式如下:
#!/usr/bin/python
# -*- coding: &encoding name& -*-
其中&encoding name&是代码所需要的编码格式,它可以是任意一种Python支持的格式,一般都会使用utf-8的编码格式。
2、使用u'中文'替代'中文'
str1 = '中文编码'
str2 = u'中文编码'
Python中有以上两种声明字符串变量的方式,它们的主要区别是编码格式的不同,其中,str1的编码格式和Python文件声明的编码格式一致,而str2的编码格式则是Unicode。如果你要声明的字符串变量中存在非ASCII的字符,那么最好使用str2的声明格式,这样你就可以不需要执行decode,直接对字符串进行操作,可以避免一些出现异常的情况。
3、Reset默认编码
Python中出现这么多编码问题的根本原因是Python 2.x的默认编码格式是ASCII,所以你也可以通过以下的方式修改默认的编码格式:
import sys
sys.setdefaultencoding('utf-8')
这种方法是可以解决部分编码问题,但是同时也会引入很多其他问题,得不偿失,不建议使用这种方式。
4、终极原则:decode early, unicode everywhere, encode late
最后分享一个终极原则:decode early, unicode everywhere, encode late,即:在输入或者声明字符串的时候,尽早地使用decode方法将字符串转化成unicode编码格式;然后在程序内使用字符串的时候统一使用unicode格式进行处理,比如字符串拼接、字符串替换、获取字符串的长度等操作;最后,在输出字符串的时候(控制台/网页/文件),通过encode方法将字符串转化为你所想要的编码格式,比如utf-8等。
按照这个原则处理Python的字符串,基本上可以解决所有的编码问题(只要你的代码和Python环境没有问题)。。。
5、升级Python 2.x到3.x
额,最后一个方法,升级Python 2.x,使用Python 3.x版本。。这样说主要是为了吐槽Python 2.x的编码设计问题。当然,升级到Python 3.x肯定可以解决大部分因为编码产生的异常问题。毕竟Python 3.x版本对字符串这部分还是做了相当大的改进的,具体的下面会说。。。。
Python 3.x中的Unicode
在Python 3.0之后的版本中,所有的字符串都是使用Unicode编码的字符串序列,同时还有以下几个改进:
1、默认编码格式改为unicode
2、所有的Python内置模块都支持unicode
3、不再支持u'中文'的语法格式
所以,对于Python 3.x来说,编码问题已经不再是个大的问题,基本上很少遇到上述的几个异常。关于Python 2.x str&unicode和Python 3.x str&bytes的更多说明和对比,大家可以看一下:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具(文艺男青年)
(飞翔的言)
第三方登录:

我要回帖

更多关于 python复制的缩进问题 的文章

 

随机推荐