Python:用空行对文件进行排序会导致错误

标签 python csv

我有一些 csv 文件,其中一列中有时间戳。我有一些按日期排序的 python 代码:

#!/usr/bin/python
import csv
import time
import datetime
import operator
import io
import os


def sortTasksCSV():
   with open(os.environ['JURGEN']+'Jurgen/nextActions/nextActions.csv', 'rb') as
 f:
    reader = csv.reader(f, skipinitialspace=True)
    tasklist=sorted(reader,key=operator.itemgetter(3), reverse=True)
    tasklist.sort(key=lambda item: datetime.datetime.strptime(item[3], '%Y-%
m-%d (%a) -  %H:%M:%S'))
    output=io.BytesIO()
    writer=csv.writer(output)
    return tasklist

当我给它一个包含空行的文件时,我在“itemgetter(3)”行上收到一个(可以合理理解的)错误。理想情况下,我希望代码能够优雅地处理空白行 - 我可以先循环遍历这些行并删除空白行 - 但这感觉不太优雅 - python 中有更好的方法吗?

最佳答案

您可以使用filter(filterfunction, iterable)不使用循环过滤掉空行(或任何其他类型的行)。如果您省略过滤器函数(即使用 None),它将过滤掉所有在解释为 bool 值时计算结果为 False 的内容,例如空行。

在 Python2 中,filter 将使用可迭代对象中过滤后的元素创建一个新列表。在 Python 3 中,结果本身就是一个可迭代对象。如果您希望它在 Python 2 中返回可迭代对象,请使用 itertools.ifilter

最小示例:

lines = map(str.split, """a b 5
c d 2
e f 6

g h 1
i j 9""".splitlines())

import operator
print sorted(filter(None, lines), key=operator.itemgetter(2))

输出:

[['g', 'h', '1'],
 ['c', 'd', '2'], 
 ['a', 'b', '5'], 
 ['e', 'f', '6'], 
 ['i', 'j', '9']]

关于Python:用空行对文件进行排序会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27589247/

相关文章:

php - 在 Laravel 中验证 CSV 文件

csv - 如何从 RDD = sc.textFile ("s3n://bucket/*.csv") 中的所有文件中剥离标题?

Python:在异常实例中重写 __str__

python - 如何在 Dash Plotly 中将 Long_callback 与多页应用程序一起使用?

mysql - 删除 csv 文件中最多第 N 个模式匹配实例的文本

java - FlatFileItemWriter 无法创建新文件或更新现有文件

java - java中比较两个csv文件的内容

python - 使用 Pandas 按组获取计数

python - 有条件的列上的 Pandas 累积总和

python / flask : only one user can call a endpoint at one time