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

2024-09-29 10:22:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些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中有更好的方法吗?在


Tags: 文件csvkey代码ioimporttruedatetime
1条回答
网友
1楼 · 发布于 2024-09-29 10:22:30

您可以使用^{}过滤出空行(或任何其他类型的行),而无需使用循环。如果省略filter函数(即使用None),它将过滤出所有在解释为布尔值时计算为False的所有内容,例如空行。在

在Python2中,filter将使用iterable中筛选的元素创建一个新列表。在python3中,结果本身就是iterable。如果希望它在Python2中返回iterable,请使用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))

输出:

^{pr2}$

相关问题 更多 >