如何将一行中的值与另一行中的值进行比较?

时间:2019-06-10 21:37:31

标签: python

我有一个文件,其中每个行都有两个值。我需要比较每行中的第二个值,以确保这些值不会重复多次。我对编码非常陌生,因此不胜感激。

我的想法是将每一行变成一个包含两个项目的列表,然后我可以比较几个列表中的相同位置。

这是我的文件包含的示例:

20:19:18 -1.234567890
17:16:15 -1.098765432
14:13:12 -1.696969696
11:10:09 -1.696969696
08:07:06 -1.696969696

这是我要使用的代码。基本上,我希望它忽略前两行并打印出第三行,因为它会重复多次:

with open('my_file') as txt:                                                                                           

   for line in txt: #this section turns the file into lists                                                                                                                              
       linelist = '%s' % (line)                                                                                                                   
       lista = linelist.split(' ')                                                                                                                

   n = 1                                                                                                                                          
   for line in lista:                                                                                                                             
       listn = line[n]                                                                                                                       
       listo = line[n + 1]                                                                                                                   
       listp = line[n + 2]                                                                                                                   
       if listn[1] == listo[1] and listn[1] == listp[1]:                                                                                                                   
           print line                                                                                                                             
       else:                                                                                                                                      
           pass                                                                                                                                   
       n += 1   

我想看的是:

14:13:12 -1.696969696

但是在if长的“字符串索引超出范围”语句中,我仍然收到错误消息

3 个答案:

答案 0 :(得分:1)

使用字典类型结构会更好。字典可让您快速检查是否存在。

基本上检查第二个值是否是字典中的键。如果有按键,则打印该行。否则,只需添加第二个值作为以后的键即可。

myDict = {}
with open('/home/dmoraine/pylearn/%s' % (file)) as txt:
    for line in txt:
        key = line.split()[1]
        if key in myDict:
            print(line)
        else:
            myDict[key] = None #value doesn't matter

答案 1 :(得分:1)

一些简单的调试突出了功能问题:

with open('my_file.txt') as txt:
   for line in txt: #this section turns the file into lists
       linelist = '%s' % (line)             
       lista = linelist.split(' ')          
       print(linelist, lista)

   n = 1                                    
   for line in lista:                       
       print("line", n, ":\t", line)
       listn = line[n]                 
       listo = line[n + 1]             
       listp = line[n + 2]             
       print(listn, '|',listo, '|',listp)
       if listn[1] == listo[1] and listn[1] == listp[1]:             
           print(line)                      
       n += 1   

输出:

20:19:18 -1.234567890
 ['20:19:18', '-1.234567890\n']
17:16:15 -1.098765432
 ['17:16:15', '-1.098765432\n']
14:13:12 -1.696969696
 ['14:13:12', '-1.696969696\n']
11:10:09 -1.696969696
 ['11:10:09', '-1.696969696\n']
08:07:06 -1.696969696
 ['08:07:06', '-1.696969696\n']
line 1 :     08:07:06
8 | : | 0

简而言之,您对变量的处理不正确。当您进入第二个循环时,lista是最后一行的“单词”;您已经阅读并丢弃了所有其他内容。 line遍历这些单词。因此,您的listn / o / p变量是单个字符。因此,没有listn[1]这样的东西,您会得到一个错误。

相反,您需要构建某种类型的浮点数列表。例如,以您的顶部循环为起点:

float_list = {}
for line in txt: #this section turns the file into lists                                                                                       
    lista = line.split(' ')
    my_float = float(lista[1])         # Convert the second field into a float
    float_list.append(my_float)

现在,您需要编写代码以在float_list中查找重复项。你可以从那里拿走吗?

答案 2 :(得分:0)

最终将每一行变成一个列表,然后制作所有列表的字典。谢谢大家的帮助。