2

これが私のコード全体です:

import csv

def numbersOut():
    for i in range (1, 1001):
        out.writerow("%s" % (i+1, ))
        out.writerow("\n")

csvname = raw_input("Enter desired filename: ")
headers = ["ID", "Student", "Grade"]

out = csv.writer(open(csvname + ".csv","w"), delimiter=',', lineterminator='\n', quoting=csv.QUOTE_ALL)
out.writerow(headers)
out.writerow(numbersOut())

そして、「sequence expected」エラーをスローしているセクションは 14 行目、つまり次の行です。out.writerow(numbersOut())

基本的に、私がやろうとしているのは、関数numbersOut()を使用して CSV ファイルに 1000 行を入れ、それぞれに独自の ID を付けることです (行 1 (マイナスヘッダー) は = 1、行 2 は = 2 など)。範囲を使用してすべてを1行にまとめることができましたが、それは私が必要としているものではありません。

ただし、関数を使用しようとするとエラーが発生し続けます。呼び方の問題なのか、関数自体の問題なのかわかりません。

何か案は?明確にする必要がある場合は、お尋ねください。私はあまり意味をなさない癖があります。

前もって感謝します!

編集: 要求に応じてトレースバック:

Traceback (most recent call last):
  File "writer.py", line 14, in <module>
   out.writerow(numbersOut())
_csv.Error: sequence expected
4

2 に答える 2

2

Python では、関数が返されずに終了した場合、返されると見なされNoneます。あなたのnumbersOut()機能は何もしませんreturn。だから、あなたが書くとき

out.writerow(numbersOut())

を呼び出すことになりout.writerow(None)ます。Noneこれは、シーケンスではなく、モジュールがCSV データの行としてcsv書き出す方法を認識していないため、表示されているエラーを示します。None

引数としてnumbersOut取ることを宣言したほうがよいと思います:out

def numbersOut(out):
    for i in range (1, 1001):
        out.writerow("%s" % (i+1, ))
        out.writerow("\n")

そして、それを使用して呼び出します

numbersOut(out)

他にもいくつか変更を加えることをお勧めします。

行に単一の値のみを書き込みたい場合は、行を置き換えます

        out.writerow("%s" % (i+1, ))

        out.writerow(["%s" % (i+1, )])

(挿入された[と に注意してください])。 writerow一連の値を取得し、各値を個別のカンマ区切りセルに書き込みます。単一の文字列を渡すと、それは一連の文字として解釈され、各文字は独自のセルになります。

次に、行を削除することをお勧めしますout.writerow("\n")。を使用して行を書き込むwriterowと、csvモジュールは行末を出力します。手動で行を終了する必要はありません。実際、この行out.writerow("\n")は、数値を含む各行の間に改行を含むセルを書き込むことになります。

于 2012-09-12T21:44:57.183 に答える
1

以下の作品:

import csv

def numbersOut():
    for i in range (1, 1001):
        seq=[i,i,i,i]
        out.writerow(seq)
        out.writerow("\n")

csvname = raw_input("Enter desired filename: ")
headers = ["ID", "Student", "Grade"]

out = csv.writer(open(csvname + ".csv","w"), delimiter=',', lineterminator='\n', quoting=csv.QUOTE_ALL)
out.writerow([headers])
out.writerow([numbersOut()]) # writerow() expects a sequence a list or a tuple.  
于 2012-09-12T21:44:21.860 に答える