私は現在、私と友人の間の競争としてクイズを制作中で、私が比較的新しいプログラミングについて少し学びます。私のプログラムは、クイズを使用する各ユーザーの最後の3つの結果を保持し、最も古い結果を最新のものに置き換えます。私が到達した現在の段階では、ユーザーがファイルに自分の名前を持っているかどうかをチェックすることができます。csvファイル内の特定のデータを置換する
if team == 'Team 1':
path = 'team1scores.csv'
elif team == 'Team 2':
path = 'team2scores.csv'
elif team == 'Team 3':
path = 'team3scores.csv'
else:
print("--Error Defining File Path--")
with open(path, 'rt') as csvfile:
ver_read = csv.reader(csvfile, delimiter =",")
ver_write = csv.writer(csvfile, delimiter =",")
for row in ver_read:
if user in row:
row_data = list(ver_read)
row_len = len(row_data)
if row_len >= 3:
>>> The Problem is here
else:
with open(path, 'a+', newline='') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerows(datacsv)
私はプログラムを持っている問題は、結果を交換することができるという、私はすでに3つの入力を持つ私のcsvファイルに以下のデータを持っていたと言っています。これらは2つの異なる列に保持する必要があります。ソート機能を追加する予定です。
Jake,5
Jake,7
Jake,2
Max,9
Lee,8
私は上記のコードに基づいて何回か実験しましたが、プログラムが情報交換の状況に達すると混乱します。これまで私はファイル全体を上書きすることができましたが、特定のデータは上書きできませんでした。
ver_writeは、次の手順で必要になりますか?
編集:私は今、更新されたバージョンを持っているが、まだ同じ問題を抱えている 、このプログラムは、私の基準に適合する2PSの答えから構成されています。上書きする必要があり、名前とスコアの2つの異なるセルに印刷する必要があります。私が必要とするものの基礎はありますが、うまくいきません。
from collections import OrderedDict
user_data = OrderedDict()
data_to_write = []
with open(path, 'r+') as csvfile:
ver_read = csv.reader(csvfile, delimiter =";")
for x, row in enumerate(ver_read):
if user == row[0]:
user_data[x] = row
else:
data_to_write.append(row)
if len(user_data) > 2:
keys = user_data.keys()[-2:]
for x in keys:
data_to_write.append(user_data[x])
data_to_write.append(datacsv)
with open(path, 'w') as csvfile:
ver_write = csv.writer(csvfile, delimiter=",")
ver_write.writerows(data_to_write)
else:
with open(path, 'a+', newline='') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=',')
csvwriter.writerows(datacsv)
私はここで何か根本的に間違っていますか?
あなたは何の問題がありますか?あなたのロジックを実装する方法や例外があるかどうかわからないのですか?また、完全なコードを表示し、入力と期待される出力の例を挙げてください。 – chinglun
パンダライブラリーの使用を検討しましたか?このようなことはずっと簡単です。データフレームの操作をはるかに迅速に行うことができます。また、3つではなく、1つのファイルにデータを保存しようと思います。おそらく、チーム/個人がクイズを取っていることを示す列を持つだけの方がよいでしょう。 – flyingmeatball
「John、4」行の順序は重要です(つまり、すべてのJohnのスコアをグループ化しても問題ありません)。 –