16

Python で次のコードを実行しようとすると、エラーが発生します。

 csv.Error: sequence expected

私のコードの何が問題なのか誰にもわかりませんか? (ファイルは以前にプログラムにインポートされています)。

import csv
file = open('/home/btoms/Desktop/TomsBen/2000/01/01/20000101acme.mts', 'r')

variables = []

file.readline() #Skip a line
file.readline() 
file.readline() #Skip another line

for line in file:
    tmp = line.split()
    tmp_STID = str(tmp[0])
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3])
    tmp_Times = float(tmp[2])
    variables.append(tmp_STID)
    variables.append(tmp_Times)
    variables.append(tmp_T)
    variables.append(tmp_RH)


    if tmp_T < 6.2 and tmp_RH > 60.0: 
    dataCSV = open('ProgramCheck.csv', 'w') 
    writer = csv.writer(dataCSV, dialect='excel')
    writer.writerow(['Station ID', 'Time', 'Temperature' , 'Relative Humidity']) 

    for values in variables:
        writer.writerow(values)
    else:
            pass
    file.close()

エラーは次のように表示されます。

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

3 に答える 3

17

writer.writerow値のシーケンス (タプルまたはリスト) が単一の行に書き込まれ、その行の列ごとに 1 つの値が想定されます。代わりに与えたのは単一の値です。コードは次のようになります。

writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH])

そして、このコードのほとんどは、ステーションごとに 1 回 (つまり、行ごとに 1 回) 実行される大きなループにあるように見えます。


dataCSV = open('ProgramCheck.csv', 'w') 
writer = csv.writer(dataCSV, dialect='excel')
writer.writerow(['Station ID', 'Time', 'Temperature' , 'Relative Humidity']) 

for line in inputData:
    tmp = line.split()

    tmp_STID = str(tmp[0])
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3])
    tmp_Times = float(tmp[2])

    if tmp_T < 6.2 and tmp_RH > 60.0: 
        writer.writerow([tmp_STID, tmp_Times, tmp_T, tmp_RH])

file.close()
于 2013-02-09T02:49:00.333 に答える
2

現在、文字列だけを書き込もうとしているようです

  writer.writerow(variables)

行全体を書き込みます

 tmp_STID = str(tmp[0])
    tmp_T = float(tmp[4]) 
    tmp_RH = float(tmp[3])
    tmp_Times = float(tmp[2])

変数リストを調べる

[tmp_STID, tmp_T, tmp_RH, tmp_Time]

また、反復ごとに新しい csv ファイルを開いているように見えますか? それはループから外れるべきですか?

于 2013-02-09T02:43:22.860 に答える
1

さて、「writeROW」メソッドを使用しようとするときに Python が何を期待するかを考えてみてください :) 値を 1 つだけ入力してもうまくいきません。代わりに、何らかの形で相互に関連するすべての値を 1 つのセットで取得する場合があります。

例: 16:35 のワシントン駅の気温は 26℃、湿度は 85% です。これは次のように表されます: ["Washington", "16:35", 26, 85]。

于 2013-02-09T02:49:34.953 に答える