【问题标题】:Python sorted() skip row with empty coloumnPython sorted() 跳过空列的行
【发布时间】:2016-05-03 10:44:38
【问题描述】:

我有一个用“|”分隔的 CSV。我正在尝试读取 CSV,按第 8 列排序,并将排序后的数据作为标准 CSV 输出到标准输出。问题是输入 CSV 中的某些行没有 8 列。可以完全跳过那些没有第 8 列的行。现在,当它遇到没有第 8 列的行时,它会抛出错误“列表索引超出范围”。如果我可以让它继续并忽略该行,那将是完美的。

任何帮助将不胜感激。当然愿意完全改变代码块。

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

【问题讨论】:

  • “继续并忽略该行”是指丢弃该行吗?
  • 是的,我的意思是丢弃该行。

标签: python sorting csv


【解决方案1】:

只在排序前过滤行

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

【讨论】:

  • 我更喜欢filteredrows = [row for row in reader if len(row) > col]。然后filteredrows.sort(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多