我有一个文件,其中每个行都有两个值。我需要比较每行中的第二个值,以确保这些值不会重复多次。我对编码非常陌生,因此不胜感激。
我的想法是将每一行变成一个包含两个项目的列表,然后我可以比较几个列表中的相同位置。
这是我的文件包含的示例:
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
长的“字符串索引超出范围”语句中,我仍然收到错误消息
答案 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)
最终将每一行变成一个列表,然后制作所有列表的字典。谢谢大家的帮助。