我有一些 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/