删除文本文件中每个第二次出现的单词(Python)

时间:2013-10-02 12:33:11

标签: python string accumulator

我想在文件中删除“name”一词,但不删除其他文件。我猜测最好的方法是使用某种累加器模式,但我不知道如何实现它。

到目前为止,我有:

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 ......

感谢您的帮助,

蓬松

2 个答案:

答案 0 :(得分:2)

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

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)

答案 1 :(得分: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)

我希望这会有所帮助。如果您不理解某些内容,请随时询问。