2013-10-03 2 views
-1

Я знаю, что я уже опубликовал аналогичный вопрос, но этот вариант отличается, и у меня больше кода. Поскольку последний вопрос был отклонен (хотя ответы были полезны для меня), мода могла удалить его, чтобы не загромождать форум.Удаление каждого второго появления слова в txt-файле (Python) l

В любом случае, надеюсь, никто меня не раздражает, задавая другой вопрос, пытающийся достичь моей цели.

Я пытаюсь удалить каждое нечетное вхождение имени в txt-файл. Есть две частей к моему вопросу:

а) почему я получаю AttributeError: 'str' object attribute replace is read-only

б) я буду об этом правильном пути, используя шаблон аккумулятора или есть лучший способ сделать это? Кто-то еще предложил использовать модуль re, но так как я новичок, и я мало что знаю об этом, я пока что пытаюсь его избежать.

Это мой код до сих пор:

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


new_file = open("new_text.txt", "w") 

counter = 0 
name = "Courtney" 

for number in range(temp.count(name)): 
    counter = +1 
    temp.find("Courtney") 
    if counter % 2 == 0: 
     pass 
    else: 
     temp.replace = ("Courteny", "") 

new_file.write(temp)   
new_file.close 

Так что я хочу, чтобы удалить первое вхождение «Courtney», но не второй и так далее до конца файла. Затем запишите результаты в новый файл.

Любая помощь очень ценится,

Пушистый

+0

Вы не закрываем файл с 'f.close'. Вам нужно вызвать функцию ('f.close()'). – Matthias

ответ

1
f = open("old_text.txt") 
temp = f.read() 
f.close 


new_file = open("new_text.txt", "w") 

counter = 0 
name = "Courtney" 

for number in range(temp.count(name)): 
    counter = +1 
    temp.find("Courtney") 
    if counter % 2 == 0: 
     pass 
    else: 
     temp = temp.replace("Courteny", "") 
#      ^No need for = sign here 

new_file.write(temp)   
new_file.close 

str.replace является функцией, и принимает два параметра, первый вещь, которую вы хотите заменить, и вторую вещь, которую вы хотите заменить его с. Таким образом, вам не нужно ничего назначать здесь.

Это то, что ваш код должен выглядеть следующим образом:

remember = [] 
with open('old_text.txt', 'r') as old: 
    for var in old: 
     remember += str(var).split(' ')[::2] 
     remember += "\n" 

with open('new_text.txt', 'w') as new: 
    for var in remember: 
     new.write(var + ' ') 

print remember 
+0

Спасибо за это! Это остановило ошибку, хотя программа все еще не делает то, что я хочу, чтобы она делала. Я хочу, чтобы он перебирал текстовый файл, удаляя первое, третье, пятое и т. Д. Появление имени «Кортни». – Ben

+0

@fluffybonkers На самом деле в коде есть намного больше ошибок, я постараюсь и доберусь до них всех. –

+0

Благодарим вас за помощь. Поэтому я могу избежать того, чтобы в будущем проголосовать за то, что было о моем вопросе, который раздражал кого-то другого и заставлял их голосовать вниз? – Ben

0

Это следует сделать это:

import collections 
with open('path/to/input') as infile, open('path/to/output', 'w') as outfile: 
    counts = collections.defaultdict(int) 
    for line in infile: 
    line = line.strip().split() 
    for word in line: 
     if not counts[word]%2: 
     outfile.write(word + " ") 
     counts[word] += 1 
    outfile.write('\n') 
Смежные вопросы