我知道我已经发布了一个类似的问题,但这个问题有所不同,我有更多的代码。由于最后一个问题被拒绝(尽管答案对我有帮助),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'而不是第二次出现,直到文件结束为止。然后将结果写入新文件。
非常感谢任何帮助,
蓬松
答案 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')