Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用特定条件从文件中选择行_Python_File Io_Python 2.7 - Fatal编程技术网

Python 使用特定条件从文件中选择行

Python 使用特定条件从文件中选择行,python,file-io,python-2.7,Python,File Io,Python 2.7,我是Python新手,需要帮助: 我有一个文件,上面有这样的行(见下文)。我想从这个文件中复制行,因为有些行有相似的日期,如果行有相似的日期,我想选择列表末尾数字最小的行 '1990-01-01','f','2' '1990-01-02','c','4' '1990-01-01','j','2.5' '1990-01-01','j','1.5' '1990-01-02','b','3.9' 首先是一些代码: text_data = """'1990-01-01','f','2' '1990-0

我是Python新手,需要帮助:

我有一个文件,上面有这样的行(见下文)。我想从这个文件中复制行,因为有些行有相似的日期,如果行有相似的日期,我想选择列表末尾数字最小的行

'1990-01-01','f','2'
'1990-01-02','c','4'
'1990-01-01','j','2.5'
'1990-01-01','j','1.5'
'1990-01-02','b','3.9'
首先是一些代码:

text_data = """'1990-01-01','f','2'
'1990-01-02','c','4'
'1990-01-01','j','2.5'
'1990-01-01','j','1.5'
'1990-01-02','b','3.9'
"""

import csv
from StringIO import StringIO
from operator import itemgetter
from itertools import groupby


temp = StringIO(text_data)
tabular = list(csv.reader(temp, quotechar="'"))
tabular.sort(key=lambda L: (L[0], float(L[2]))

for key, val in groupby(tabular, itemgetter(0)):
    print next(val) # or do something appropriate
我已将文本放入代码中,并将其包装在StringIO对象中以模拟文件,但通常会使用open()在文件上使用csv.reader打开文本

然后按数据列(索引0)和值列(索引2)对数据进行排序-这种排序顺序确保相同的日期在一起(我知道你提到的“相似”,但这个配方可以调整),并且对于每个日期,值最低的列首先出现

groupby()用于迭代匹配特定条件的键-如果它们满足该条件,则它们位于同一“组”中键(分组的对象)将是日期的值,“val”将是该键中可用值的另一个可数。因为只需要第一个,所以使用next(val)将返回值最小的结果

输出为:

['1990-01-01', 'j', '1.5']
['1990-01-02', 'b', '3.9']

我尝试应用此解决方案,但由于我使用for循环逐行读取csv文件,因此找不到一种方法来创建列表列表,以便对其进行排序。如果从csv文件中读取,您能告诉我这将是怎样的吗?抱歉-我不明白-列表已经排序了-请您更具体一些好吗?我试着做:myInput=csv.reader(open(path)),然后我逐行读取:对于myInput中的行:tablar=list(line),从这里我尝试使用:tablar.sort(key=lambda L:(L[0],float(L)进行排序[2] ),并继续:对于键,在groupby中使用val(表格,itemgetter(0)):下一步打印(val)我需要一种方法来读取for循环外部的put-in列表中的所有行,然后对其进行排序。当我在for循环中执行此操作时,我想它会尝试逐行排序。但是groupby迭代器的返回结果已经按日期和值排序了……或者你是说还没有到达groupby阶段?