Skip to main content
 首页 » 编程设计

python之在python中排序时列出超出范围的索引

2025年05月04日34birdshome

我正在尝试将 CSV 文件读入列表,然后根据列表的前两列对其进行排序(如果第一列相同,则首先按第一列,然后按第二列)。这就是我正在做的:

def sortcsvfiles(inputfilename,outputfilename): 
    list1=[] 
    row1=[] 
    with open(inputfilename,'rt') as csvfile1: 
        reader=csv.reader(csvfile1) 
        cnt=0        
        for row in reader: 
            if cnt==0:        #skip first row as it contains header information 
                row1=row 
                cnt+=1 
                continue     
            list1.append((row))  
 
        list1.sort(key=lambda ro: (int(ro[0]),int(ro[1]))) 
 
    list1.insert(0, row1) 
    with open(outputfilename,'wt') as csvfile1: 
        writer=csv.writer(csvfile1, lineterminator='\n') 
        for row in list1: 
            writer.writerow(row) 

但是我收到以下错误:

  File "C:\Users\50004182\Documents\temp.py", line 37, in <lambda> 
    list1.sort(key=lambda ro: (int(ro[0]),int(ro[1]))) 
IndexError: list index out of range 

我该如何解决这个问题?

请您参考如下方法:

您的文件中可能有一个空行。也许是最后一个。例如,您可以忽略空行:

def sortcsvfiles(inputfilename,outputfilename): 
    with open(inputfilename,'rt') as csvfile: 
        reader = csv.reader(csvfile) 
        header = next(reader) 
        data = [row for row in reader if row] # ignore empty lines 
        data.sort(key=lambda ro: (int(ro[0]),int(ro[1]))) 
 
    with open(outputfilename,'wt') as csvfile: 
        writer=csv.writer(csvfile, lineterminator='\n') 
        writer.writerow(header) 
        writer.writerows(data)