エラーから始めて、少しずつ変更してみましょう。
file2.write(i+count((i)in list1))
# ^^^^^^^^^^^^^^^^^^
# NameError: name 'count' is not defined
問題は、カウントに誤ってアクセスしていることです。 Counter
は、dict
のように動作します。キーは何がカウントされ、値はカウント(int
)です。あなたはので、他の理由でエラーを与えるであろう、このように変更し、ラインi
のカウントにアクセスするには、あなたのCounter
名前counter
を与えた:、我々は成功した回数を取得しているにもかかわらず
file2.write(i+counter[i])
# ^^^^^^^^^^
# TypeError: must be str, not int
を私たちがすることはできませんこのように行に追加してください。i
行と数は2種類あります。 1つはテキスト(str
)で、もう1つは数字(int
)です。その数字をテキスト表現に変える必要があります。それがあなたを混乱させる場合は、2 + 2 == 4
のように考えると、"2" + "2" == "22"
です。
file2.write(i+str(counter[i]))
これ以上のエラーが、あなたがテストしているかに応じて、ファイルが空のままであるかもしれないfile2
としてオープン:ここでそれを行う方法です。変更が完了すると、変更はディスクに書き込まれます。そのことを決して忘れないために、with
ステートメントを使用して、簿記をPythonに任せることができます。インデントされたブロックの最後では、ファイルは自動的に閉じられます。以下は、いくつかのより多くの完全なコードが変更にコメントされています
21street
1Train
2
数は次の行に終わる:それを実行した後
# imports at the top
import collections
list1=[]
with open(textfile1,"r") as file1:
for line in file1:
list1.append(line)
# file1 automatically closed here
counter=collections.Counter(list1)
list2=list(set(list1))
list3=sorted(list2)
with open(textfile2,"w") as file2:
# i implies index which it isn't; let's call it line too
for line in list3:
file2.write(line+str(counter[line]))
# file2 automatically closed here
をfile2
は、次のようになりますように、ファイルが開かれました。この理由は、リストに保存された行が"21street"
と"Train"
ではなく、"21street\n"
と"Train\n"
であることにあります。末尾の"\n"
は行区切り文字としての改行文字です。それ以降のテキストを追加すると、新しい行に終わります。これがポイントです。 list
では、このようなセパレータはもはや必要ないので、のは、それを削除してみましょう:
list1.append(line.rstrip("\n"))
# ^^^^^^^^^^^^^
今、あなたの出力は次のようになりウィル:
あなたが右に、バックセパレータを追加する必要があり
21street1Train2
ファイルに再度書き込むときに、場所を指定します。正しい場所は何ですか?行の終わりに。また、ライン間のスペースとカウントがいいだろう:必要に応じて
file2.write(line+" "+str(counter[line])+"\n")
# ^^^^ ^^^^^
は最後に、出力は次のようになります。
21street 1
Train 2
!どうもありがとうございました! :) – Jaakkath
@Jaakkath私は本質的に焦点を当て、より教育的な答えを書き直しました。 :) –