【问题标题】:Why is my csv sort function not working?为什么我的 csv 排序功能不起作用?
【发布时间】:2012-08-08 08:59:58
【问题描述】:

我正在获取一个带有标题行的 csv 文件(称为 aggregate_file),按列对其进行排序,然后将其重新写入另一个 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']

所以我完全不明白为什么我会收到此错误消息。我错过了什么?

【问题讨论】:

    标签: python sorting csv


    【解决方案1】:

    variable_names 应该是字符串的listtuple。由于字符串也表现得像序列,variable_names 上的 * 正在将您的函数调用变成这样:

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

    当你明确希望函数调用是这样的:

    sortbyCounty(aggregate_file, sorted_file, 'CTYCODE90')
    

    制作variable_names 字符串列表或元组应该可以做到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      相关资源
      最近更新 更多