1

ヘッダー行(と呼ばれるaggregate_file)を含むcsvファイルを取得し、列で並べ替えて、別のcsvファイル(と呼ばれる)に再書き込みしていますsorted_file。並べ替える列の見出しは、で指定されvariable_namesます。

def sortbyCounty(aggregate_file, sorted_file, *variable_names): 
    f = open(aggregate_file, 'r')
    readit = csv.reader(f) 
    headers = readit.next()
    col_indices = []
    for var in variable_names: 
         col_indices.append(headers.index(var))
    print col_indices
    thedata = list(readit)
    thedata.sort(key=operator.itemgetter(col_indices))
    fx = open(sorted_file, 'w') 
    writeit = csv.writer(fx)
    writeit.writerow(headers)
    writeit.writerows(thedata)
    writeit.close()
    return sorted_file

次に、この関数を次の行で呼び出します。

aggregate_file = "Aggregate_test90.csv"
sorted_file = "County_test90.csv"
variable_names = 'CTYCODE90'
test = sortbyCounty(aggregate_file, sorted_file, *variable_names)

これが私のエラーメッセージです:

col_indices.append(headers.index(var))
ValueError: list.index(x): x not in list

ただし、printリストheadersを表示すると、変数が存在することがはっきりとわかります。

['_STATE90', 'HEIGHT90', 'WEIGHT90', '_BMI90', 'AGE90', 'CTYCODE90', 'IYEAR90', 'SEX90', '_RFOBESE90']

そのため、なぜこのエラーメッセージが表示されるのかまったくわかりません。私は何が欠けていますか?

4

1 に答える 1

2

variable_nameslistまたはの文字列である必要がtupleあります。文字列もシーケンスのように動作するため、*onvariable_namesは関数呼び出しを次のように変換します。

sortbyCounty(aggregate_file, sorted_file, 'C', 'T', 'Y', 'C', 'O', 'D', 'E', '9', '0')

明らかに関数呼び出しを次のようにしたい場合:

sortbyCounty(aggregate_file, sorted_file, 'CTYCODE90')

variable_names文字列のリストまたはタプルを作成する必要があります。

于 2012-08-11T05:36:15.973 に答える