-1

私はすでに同様の質問を投稿していることを知っていますが、これは異なり、より多くのコードがあります。最後の質問は投票で却下されたので (回答は役に立ちましたが)、MOD はフォーラムを混乱させないように削除することができました。

とにかく、私の目標を達成しようとして別の質問をすることで、誰もイライラしないことを願っています.

txt ファイル内の奇数の名前をすべて削除しようとしています。私の質問には2つの部分があります:

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

したがって、「コートニー」の最初の出現を削除したいのですが、2番目の出現はファイルの最後まで削除したくありません。次に、結果を新しいファイルに書き込みます。

どんな助けでも大歓迎です、

ふわふわ

4

2 に答える 2

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は関数であり、2 つのパラメーターを受け取ります。1 つ目は置き換えたいもの、2 つ目は置き換えたいものです。したがって、ここでは何も割り当てる必要はありません。

コードは次のようになります。

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
于 2013-10-03T06:00:14.477 に答える
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')
于 2013-10-03T06:21:24.687 に答える