Maketrans没有使用python3.4为petl工作

时间:2014-12-18 05:38:59

标签: python python-3.x petl

我正在使用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包那么为什么它给出导入错误。

不确定发生了什么事可以帮助

4 个答案:

答案 0 :(得分:10)

在Python2中,maketrans是一个属于string模块的函数。但是在Python3中,maketransstr类型的静态方法。

答案 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传递来源会显示数百个问题。**

那么,你如何解决这个问题?

  1. 使用petl以外的其他内容。
  2. 使用Python 2.7进行petl工作。
  3. 帮助移植它。
  4. *实际上,在3.0中,它仍然存在,但仅适用于bytes个对象。在3.1中,maketranstranslate方法已添加到bytesbytearray,相当于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)