在python中使用replace函数的问题

时间:2017-04-04 10:12:47

标签: python

我正在尝试加密一个单词,而不是在给定的文本中替换它,因为我在 python 中使用 replace()。此方法可以替换单词,但也保留文本中的原始单词。以下是我的代码

import subprocess
import bz2
import base64
from subprocess import Popen, PIPE

cat = subprocess.Popen(["hadoop", "fs", "-cat", "/user/cloudera/xxx.dat"], stdout=subprocess.PIPE)
for line in cat.stdout:
    code = line.split('|')[0]
    if (code == "ID"):
        name = line.split('|')[5]
        address = line.split('|')[11]
        ciphername = base64.b64encode(bz2.compress(name))
        cipheraddr = base64.b64encode(bz2.compress(address))
        line.replace(name,ciphername).replace(address,cipheraddr)
        print line

示例:

ID|1|ZXD0629|ZXD0629||HODJON||11383129|M|||221 B POLLARD RD��KAsODK�TBN�37764|||||||629Z800060|480837

输出:

'ID|1|ZXD0629|ZXD0629||QlpoOTFBWSZTWbk9uLgAAAIGCAbRiAACACAAMQZMQQaMItAUVNzxdyRThQkLk9uLgA==||11383129|M|||QlpoOTFBWSZTWT0tjHQAAAQeCEAALeAkDdQAAgAgADFNMjExMQpo0ZqBmowcuKOA3JhB1VMGcoxTGvi7kinChIHpbGOg|||||||QlpoOTFBWSZTWc5EbhIAAAQKAFNgABAgACEpppkIYBoRvMsvi7kinChIZyI3CQA=|480837\n'
ID|1|ZXD0629|ZXD0629||HODJON||11383129|M|||221 B POLLARD RD��KAsODK�TBN�37764|||||||629Z800060|480837

预期输出:

ID|1|ZXD0629|ZXD0629||QlpoOTFBWSZTWbk9uLgAAAIGCAbRiAACACAAMQZMQQaMItAUVNzxdyRThQkLk9uLgA==||11383129|M|||QlpoOTFBWSZTWT0tjHQAAAQeCEAALeAkDdQAAgAgADFNMjExMQpo0ZqBmowcuKOA3JhB1VMGcoxTGvi7kinChIHpbGOg|||||||QlpoOTFBWSZTWc5EbhIAAAQKAFNgABAgACEpppkIYBoRvMsvi7kinChIZyI3CQA=|480837\n

我不需要加密的原始文本我只需要在我的文本中加密。我有很多记录,所以我不能在这里发布完整的样本,这就是为什么我发布了一个小样本。我不知道这个问题是因为 replace()或者我在实施时遇到的一些错误。请帮忙

1 个答案:

答案 0 :(得分:1)

Wheb调用str.replace()您不会更改原始字符串值,replace()函数会返回新值,因此您需要使用替换后的字符串重写原始字符串:

line = line.replace(name,ciphername).replace(address,cipheraddr)
print line