1

我想编写一个将文件名作为字符串的函数,该函数打开、读取并写入一个新文件,该文件将文件中的每个 4 个字母单词更改为“XXXX”。

到目前为止,我有:

def change(filename):
    infile = open(filename,'r')
    outfile = open('changed.txt', 'w')
    l = infile.read()
    infile.close()
    x = l.split()

    for word in x:
        if len(word) == 4:
            outfile.replace(word,'XXX')

我认为我在 if 语句中弄乱了输出,但我不确定如何解决这个问题。

在我的文件(我称之为'example.txt')中,我有:“这个文件包含三个四个字母的单词”

在我的输出文件“changed.txt”中,我应该得到:“XXXX XXXX 包含三个 XXXX 字母单词”

4

2 回答 2

0
import re
re.sub('([^\w]|^)\w{4}(?=[^\w]|$)', r'\1XXXX', input)

应该做的伎俩。

编辑:右分隔符是前瞻

于 2013-06-02T18:23:10.570 回答
0

一个建议如何实现您想要做的事情:

import re
def change(filename):
    with open(filename) as infile, open("changed.txt", "w") as outfile:
        text = infile.read()
        outfile.write(re.sub(r"\b\w{4}\b", "XXXX", text))

这假设(作为简化)“单词”是四个字母数字字符的序列,被非字母数字字符包围。如果这不够具体(它也会匹配2001,不会匹配böse并且会更改they'reXXXX're),请告诉我。

主要工作由正则表达式完成,\b\w{4}\b这意味着“匹配一个单词边界,然后是四个字母数字字符,然后是一个单词边界”。

于 2013-06-02T18:23:46.640 回答