0

我想删除文件中出现的一些“名称”一词,但不删除其他。我猜最好的方法是使用某种累加器模式,但我不确定如何实现它。

到目前为止,我有:

f = open("old_text.txt")
number = f.read()
f.close

name_occurrence = (number.count("Courtney"))

我只是使用“Courtney”作为文件中实际名称的示例。我想以某种方式删除单词“Courtney”的每一个奇数出现,但不是偶数,即在number.count迭代时它为“Courtney”的每个实例分配一个数字值,然后一些代码删除具有值的单词“Courtney”的出现1,3,5,7...

谢谢你的帮助,

蓬松的

4

2 回答 2

1

未经测试,但您可以尝试这样的正则表达式:

import re

with open("old_text.txt") as f:
   txt = f.read()
   new_txt=re.sub(r'(\bCourtney\b.*?)(\s*\Courtney\b\s*)','\1',txt,re.S)

如果您想要一个动态字符串(即,其中有一个变量):

import re

name='Courtney'

with open("old_text.txt") as f:
   txt = f.read()
   new_txt=re.sub(r'(\b{}\b.*?)(\s*\{}\b\s*)'.format(name,name),'\1',txt,re.S)
于 2013-10-02T13:38:31.147 回答
1

这很难看,但它有效而且它是纯 python

文件names.txt(我在名字 Courtney 前面放了数字,以便更容易确定哪些被删除):

11111 Courtney Emma Jessica 22222 Courtney Ashley Amanda Jennifer 
Sarah Michael 33333 Courtney Christopher Matthew Joshua David
Emma Jessica Ashley Amanda Jennifer 44444 Courtney 
Sarah 55555 Courtney Michael 66666 Courtney Christopher 
77777 Courtney Emma Jessica Ashley Amanda Jennifer 88888 Courtney 
Sarah Michael 99999 Courtney Christopher Matthew

代码:

f = open("names.txt",'r')
splited_lines = []
name_occurrence = 0
name = "Courtney"

#create list of lines where line is list of words
index = 1
for line in f:
    name_occurrence += line.count(name)
    splited_line = line.split()
    splited_lines.append(splited_line)
f.close

#delete every even name (Courtney)
#if you want every odd to be deleted set word_counter on 0
word_counter = -1    
for i,line in enumerate(splited_lines):
    for j,word in enumerate(line):
        if (name in word):
            word_counter += 1 
            if (word_counter%2 == 0):
                splited_lines[i][j] = word.replace(name, "")

#create string to write back to file
text_to_save = ""
for line in splited_lines:
    for word in line:
        if word != "":
            text_to_save += word + " "
    text_to_save += "\n"

#write to file
with open('names.txt', 'w') as f:
    f.writelines(text_to_save)

我希望这有帮助。如果您有不明白的地方,请随时询问。

于 2013-10-03T11:09:46.917 回答