2016-01-26 80 views
1

我有一個由'|'分隔的CSV。我正在嘗試讀取CSV,按第8列進行排序,並將排序後的數據作爲標準CSV輸出到標準輸出。問題是輸入CSV中的某些行沒有8列。那些沒有第8列的行可以完全跳過。現在,當它碰到沒有列8的行時,它會拋出錯誤「列表索引超出範圍」。如果我能夠繼續並忽略這一行,那將是完美的。Python排序()跳過帶空行的行

任何幫助,將不勝感激。當然願意完全改變代碼塊。

with open(sys.argv[1]) as openFile: 
    reader = csv.reader((x.replace('\0','') for x in openFile), delimiter='|') 
    col = 8 
    sortedReader = sorted(reader, key=lambda k: (k[col] is None, k[col] == "", k[col]), reverse=True) # This was my attempted solution found on Google/StackOverflow. Does not work. 
    csvout = csv.writer(sys.stdout, delimiter=',') 
    for row in sortedReader: 
     try: 
      csvout.writerow(row) 
     except: 
      sys.stderr.write('[!] Error in row') 
      sys.stderr.write(row) 
      continue 
+0

通過之前剛剛篩選行「繼續並忽略該行」你的意思是放棄行? –

+0

是的,我的意思是丟棄該行。 –

回答

1

排序

filteredRows = filter(lambda x: len(x) > col, reader) 
+0

你是對的,所以在排序前過濾行 –

+1

我更喜歡'filteredrows = [row for reader in row if len(row)> col]'。然後'filteredrows.sort(...)' –