2017-02-27 3 views
1

現在、リーダーボードの作業をしようとしています。リーダーボードはスコアのみを格納します。私はcsvファイルにスコアを書き込もうとしています。 https://gyazo.com/19c9007827498fb5cf847535167d5841Python 2.7 CSVの書式が正しくない

私は、それが文字列に変換され、スコアに関係していると思いますが、ときに私は:

if col: 
    with open("rec_Scores.csv", "a") as f: 
     w = csv.writer(f, delimiter = ",") 
     w.writerow(str(curr_score) + "\n") 
    crashed = True 

これが実行されたcsvファイルは次のように終わる:ここでは、書き込みのための私のコードですスコアを変換しない、私はエラーを取得する:

Traceback (most recent call last): 
    File "C:\Users\Harry\Desktop\Desktop\Computing Project\Galaxian.py", line 173, in <module> 
    w.writerow(curr_score + "\n") 
TypeError: unsupported operand type(s) for +: 'int' and 'str' 

これは、私はおそらく小さな愚かなミスを犯してきたが、任意の助けをはるかに高く評価されるように私はPythonでCSVファイルで作業されている最初の時間です。ありがとう。

+0

ちょうど削除 '+「\ n」は'と再試行する。 – roganjosh

答えて

3

改行(\n)を自分で追加する必要はありません。 csv.writerがそれを行います。

if col: 
    with open("rec_Scores.csv", "ab") as f: 
     w = csv.writer(f, delimiter = ",") 
     w.writerow(curr_score) 
    crashed = True 

Pythonで文字列が(あなたがfor char in "abc":を言うことができる)反復可能であるので、あなたが文字列にcurr_scoreを変換するときに取得奇数結果があります。 writerowは、イテラブルを受け入れるように設定され、イテラブルの各メンバーの行に1つのフィールドを作成します。だからwriterowは、それぞれが1文字を含むいくつかの列が必要だと考えています。あなたが行の唯一の要素として文字列を追加したい場合は

、あなたは別の反復可能な、例えば、タプルで囲む必要があります。

if col: 
    with open("rec_Scores.csv", "ab") as f: 
     w = csv.writer(f, delimiter = ",") 
     w.writerow((str(curr_score),)) #note the extra brackets and comma 
    crashed = True 
+0

私はこのコードを試して、それは数字の間隔をソートしましたが、まだ各行の間にギャップがあります。 https://gyazo.com/f308088038cc214588918c7aba40cb9f なぜこのようなことが起こっているのか分かっていれば、この問題にもお手伝いしてください。どちらの方法でも、数値がすべて離れている理由を説明してくれてありがとう。 –

+0

@HarryBeggs投稿したコードは1つの値しか書きません。 2番目の番号も書き込むコードを投稿してください。 – RoadieRich

+0

そのスクリーンショットは2回実行した後で、他の書き込みはありません。ありがとう 編集:ちょうど3回目を実行し、まだそのスペースが発生している。 –

関連する問題