我有一个文件,它输出了每行都有两个值的行。我需要比较每一行中的第二个值,以确保这些值不会重复多次。我对编码非常陌生,所以如果有任何帮助,我将不胜感激。
我的想法是将每一行转换为一个列表,每行包含两个项目,然后我可以比较两个列表中相同的位置。
这是我的文件包含的内容的一个示例:
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
但是我一直收到"string index out of range“这条长if
语句的错误。
发布于 2019-06-11 06:24:53
使用字典类型的结构会好得多。字典允许您快速检查是否存在。
基本上检查第二个值是否是你的字典中的关键字。如果是键,则打印该行。否则,只需添加第二个值作为键供以后使用。
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
发布于 2019-06-11 06:36:06
一些简单的调试突出了功能问题:
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]
这样的东西,您会得到一个错误。
相反,您需要构建某种类型的浮点数列表。例如,使用top循环作为起点:
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
中查找重复项的代码。你能从那里接下来吗?
发布于 2019-06-15 04:11:02
最后把每一行都变成一个列表,然后把所有的列表都编成一个字典。感谢大家的帮助。
https://stackoverflow.com/questions/56533852
复制相似问题