替换fi中的字符

2024-06-16 18:09:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用文本文件中的编码指令替换字符。

我的文本文件包含以下行:

This is a message

我想替换a -> ee -> as -> 3

所以这行写着:

Thi3 i3 e massega

我尝试了下面的代码,但它一次只更改行中的一个字符。

import sys
import codecs

def encode():
  path = "C:\Users\user\Desktop"
  basename = "assgn2part1.txt"
  filename = path + "\\" + basename
  #file = open(filename, "rt")
  f = codecs.open(filename,encoding='utf-8')
  contents = f.read()


  print contents ,"\n"
  newcontents = contents.replace('a','e')
  newcontents = contents.replace('s', '3')

  print newcontents


  f.close()

Tags: pathimport编码contents指令openfilenamethis
3条回答

替换为:

newcontents = contents.replace('a','e')
newcontents = contents.replace('s', '3')

有了这个:

newcontents = contents.replace('a','e')
newcontents = newcontents.replace('s', '3')

或者更好:

newcontents = contents.replace('a','e').replace('s', '3')

您的代码似乎只试图将“a”替换为“e”,而不是将“e”替换为“a”。为此,您需要:

import string
newcontents = contents.translate(string.maketrans("aes", "ea3"))
>>> strs="this is a message"
>>> strs="".join(['a' if x=='e' else 'e' if x=='a' else '3' if x=='s' else x for x in strs])
>>> print(strs)
thi3 i3 e ma33ega

或者按照罗伯特的建议,使用字典

>>> strs="this is a message"
>>> dic={'a':'e','e':'a','s':'3'}
>>> strs="".join((dic.get(x,x) for x in strs))
>>> print(strs)
thi3 i3 e ma33ega

或:

>>> strs="this is a message"
>>> dic={'a':'e','e':'a','s':'3'}
>>> new_strs=''
>>> for x in strs:
     if x in dic:
        new_strs += dic[x]
     else:
        new_strs += x
>>> print(new_strs)

thi3 i3 e ma33ega

在这里工作很好。

>>> import codecs
>>> contents = codecs.open('foo.txt', encoding='utf-8').read()
>>> print contents
This is a message.

>>> print contents.replace('s', '3')
Thi3 i3 a me33age.

注意:如果希望第二个替换生效,则应在newcontents上执行:

newcontents = contents.replace('a','e')
newcontents = newcontents.replace('s', '3')

相关问题 更多 >