我正在使用petl包,我已经使用pip在virtulaenv中安装了python 3.4。当我试图测试petl包是否正确安装在python shell中 我这样做是为了检查
$ python
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from petl import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user/.env/lib/python3.4/site-packages/petl/__init__.py", line 10, in <module>
from petl.util import header, fieldnames, data, records, rowcount, look, see, \
File "/home/user/.env/lib/python3.4/site-packages/petl/util.py", line 14, in <module>
from string import maketrans
ImportError: cannot import name 'maketrans'
>>>
我试图检查字符串包中是否存在maketrans我运行此
>>> from string import maketrans
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: cannot import name 'maketrans'
>>>
发现默认的python字符串包没有这个。我不确定为什么petl包使用它而不提及它的依赖关系,如果它是默认的python包那么为什么它给出导入错误。
不确定发生了什么事可以帮助
答案 0 :(得分:10)
在Python2中,maketrans
是一个属于string
模块的函数。但是在Python3中,maketrans
是str
类型的静态方法。
答案 1 :(得分:7)
因为我在python 3.4中寻找一个明确的例子,我发布了我发现的内容:
#in py2 you need to "from string import maketrans"
table = "".maketrans('cs', 'kz')
#py2 table = maketrans('cs', 'kz')
len(table)
#in py2 you will get **len(table) = 256 in py3.4 len(table) = 2**
sentence = "cause koala is causing trouble"
sentence.translate(table)
答案 2 :(得分:2)
更新: petl >= 1.0
supports Python 3.4。
显然petl
不适用于Python 3.x。
这个特定的错误是因为3.x中不存在Python 2.x string.maketrans
函数。*但是如果你超过了它,你会发现很多其他错误。
虽然PyPI条目没有列出支持的版本(它确实应该这样),但快速谷歌出现Issue #240,以添加Python 3支持,自2014年8月26日以来一直在积压。并且2to3
传递来源会显示数百个问题。**
那么,你如何解决这个问题?
petl
以外的其他内容。petl
工作。 *实际上,在3.0中,它仍然存在,但仅适用于bytes
个对象。在3.1中,maketrans
和translate
方法已添加到bytes
和bytearray
,相当于str
上的方法,string
函数为弃用,然后在3.2或3.3中删除它们。
**其中一些问题正在使用已经在2.6或2.7中弃用的内容,鉴于petl
最初仅在2.7中工作,并且稍后移植到2.6中也是如此,这很奇怪。 子>
答案 3 :(得分:2)
使用 str 调用maketrans
LETTERS = 'abcdefghijklmnopqrstuvwxyz'
NUMBERS = '22233344455566677778889999'
## translate a-z char to phone digits
TRANS = str.maketrans(LETTERS, NUMBERS)