gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:16:44 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com