Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python进行字符转换(如tr命令)_Python_Perl - Fatal编程技术网

使用Python进行字符转换(如tr命令)

使用Python进行字符转换(如tr命令),python,perl,Python,Perl,有没有一种方法可以使用Python进行字符翻译/音译(有点像tr命令) Perl中的一些示例如下: my$string=“一些字段”; $string=~tr/dies/eaid/; 打印$string;#多米失败了 $string='猫坐在垫子上'; $string=~tr/a-z/b/d; 打印“$string\n”#b。(因为选项“d”用于删除未替换的字符) 请参见 请注意文档对unicode字符串翻译中的细微之处的评论 对于Python 3,您可以直接使用: 翻译(str.maketra

有没有一种方法可以使用Python进行字符翻译/音译(有点像
tr
命令)

Perl中的一些示例如下:

my$string=“一些字段”;
$string=~tr/dies/eaid/;
打印$string;#多米失败了
$string='猫坐在垫子上';
$string=~tr/a-z/b/d;
打印“$string\n”#b。(因为选项“d”用于删除未替换的字符)
请参见

请注意文档对unicode字符串翻译中的细微之处的评论

对于Python 3,您可以直接使用:

翻译(str.maketrans(“abc”,“def”))
< >编辑:由于代码> TR 更高级,也考虑使用<代码> Re.Sub <代码> .< /P> < P>如果您使用Python 3翻译,则不那么冗长:

>>> 'abc'.translate(str.maketrans('ac','xy'))
'xby'
啊。。还有相当于tr-d:

>>> "abc".translate(str.maketrans('','','b'))
'ac' 
对于带有python2.x的
tr-d
,请使用附加参数来转换函数:

>>> "abc".translate(None, 'b')
'ac'

更简单的方法可能是使用替换。e、 g

 "abc".replace("abc", "def")
'def'

不需要进口任何东西。适用于Python 2.x

在Python 2中,
unicode.translate()
接受普通映射,即不需要导入任何内容:

>>> u'abc+-'.translate({ord('+'): u'-', ord('-'): u'+', ord('b'): None})
u'ac-+'
translate()
方法对于交换字符(如上面的“+”和“-”)特别有用,这是用
replace()
无法完成的,使用
re.sub()
也不是很简单


但是,我必须承认,重复使用
ord()
并不能使代码看起来整洁美观。

我开发了python tr,实现了tr算法。 让我们试试看

安装:

$ pip install python-tr
例如:

>>> from tr import tr
>>> tr('bn', 'cr', 'bunny')
'curry'
>>> tr('n', '', 'bunny', 'd')
'buy'
>>> tr('n', 'u', 'bunny', 'c')
'uunnu'
>>> tr('n', '', 'bunny', 's')
'buny'
>>> tr('bn', '', 'bunny', 'cd')
'bnn'
>>> tr('bn', 'cr', 'bunny', 'cs')
'brnnr'
>>> tr('bn', 'cr', 'bunny', 'ds')
'uy'

    • 我们先绘制一张地图,然后逐字翻译。使用get for dictionary时,第二个参数指定如果找不到任何内容,将返回什么

      它可以很容易地转移到单独的功能。大多数情况下应该是非常有效的

      def变速箱(斯特林、旧、新):
      断言len(旧)==len(新)
      trans=dict(zip(列表(旧)、列表(新)))
      res=”“.加入([trans.get(i,i)for i in strin])
      返回res
      >>>transy(“abcd”、“abc”、“xyz”)
      “xyzd”
      
      它在python3中也可以工作,但不能满足OP的要求。将
      cb
      转换为
      wt
      应该将
      COBLE
      转换为
      wattage
      对于python3,
      'module'对象没有属性“maketrans”
      。使用
      “abc”。直接翻译(str.maketrans(“abc”,“def”))
      tr-cd
      是否有一个等价物?对于一个Perl人来说,称之为翻译——而不是音译——会让找到正确的事情变得更复杂。对我来说,最简单的是a。我已经做到了。
      >>> from tr import tr
      >>> tr('bn', 'cr', 'bunny')
      'curry'
      >>> tr('n', '', 'bunny', 'd')
      'buy'
      >>> tr('n', 'u', 'bunny', 'c')
      'uunnu'
      >>> tr('n', '', 'bunny', 's')
      'buny'
      >>> tr('bn', '', 'bunny', 'cd')
      'bnn'
      >>> tr('bn', 'cr', 'bunny', 'cs')
      'brnnr'
      >>> tr('bn', 'cr', 'bunny', 'ds')
      'uy'