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

时间:2013-10-03 05:56:40

标签: python loops for-loop accumulator

我知道我已经发布了一个类似的问题,但这个问题有所不同,我有更多的代码。由于最后一个问题被拒绝(尽管答案对我有帮助),mods可以删除它,以免混淆论坛。

无论如何,希望没有人会因为我提出另一个试图达到目标的问题而烦恼。

我试图删除txt文件中每个奇怪的名称。我的问题分为两部分:

a)为什么我得到AttributeError: 'str' object attribute replace is read-only

b)我是否使用累加器模式以正确的方式进行此操作,或者有更好的方法吗?其他人已经建议使用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'而不是第二次出现,直到文件结束为止。然后将结果写入新文件。

非常感谢任何帮助,

蓬松

2 个答案:

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

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