从文本文件中读取行,如果特定单词== 100,则打印该行

时间:2016-04-16 10:23:45

标签: python ubuntu

我有一个文本文件,我想用python阅读。文本文件包含单词和值,例如(rt = 3.878)。我想用python编写一个脚本来读取文本文件,如果行中的rt是== 3.878,则打印该行。 到目前为止,我设法编写了这段代码。

    with open ('/home/Desktop/hello.txt', 'r') as f:
             f.readline()
             for line in f:
                     if 'rt' in line == 3.878
                              print(line)

此代码不返回任何内容。任何人都可以指出我可能做错了什么吗?提前谢谢!

4 个答案:

答案 0 :(得分:0)

除了缺少:的语法错误之外,if 'rt' in line == 3.878是一个错误。 in运算符检查成员资格并返回TrueFalse,它们分别在int上下文中为1和0。所以==会产生意想不到的结果。

无论如何,事情不会因为我们想要它们而神奇地发生。需要进行一些处理。如果n是您要匹配的数字,并假设这些行与number = 1.234

相似
if line.split("=")[-1].strip() == str(n): # don't float() the left side
    # do something

答案 1 :(得分:0)

由于您的文件似乎具有非常规则的格式,您可以将其转换为字典:

with open('/home/Desktop/hello.txt') as f:
    result = {k:float(v) for k,v in (line.split('=') for line in f)}

然后直接访问您感兴趣的密钥并检查其值:

if result.get('rt') == 3.878:
    print('rt=3.878')

您可以快速查找任何键及其对应的值,而无需再次遍历整个文件(或保存的序列,如list)。

如果您的文件可以包含多个具有相同键的行,则需要将其值分组为list,因为词典不能包含重复键。执行此操作的常用方法是使用collections.defaultdict

import collections.defaultdict as dd
result = dd(list)
with open('/home/Desktop/hello.txt') as f:
    for line in f:
        k,v = line.split('=')
        result[k].append(float(v)

然后,您可以使用基本字典快速查找任何键及其相应的值。例如,您可以打印给定键的特定限制以上的所有值:

print(*(v for v in sorted(result.get('rt', '')) if v>100), sep='\n')

如果您真的只对rt密钥感兴趣并且检查它的值为3.878,那么您可以通过以下几种方式实现。

首先,只需阅读整个文件:

with open('/home/Desktop/hello.txt') as f:
    print('rt=3.878' in f.read())

遍历文件并在达到所需值时停止:

with open('/home/Desktop/hello.txt') as f:
    for line in f:
        if line.strip() == 'rt=3.878':
            print(line)
            break

急切地评估文件的内容并检查其中的所需值:

with open('/home/Desktop/hello.txt') as f:
    print('rt=3.878' in {line.strip() for line in f})

创建字典是最通用的方法,也是我推荐的方法。迭代文件并在达到所需值时停止可能是其余方法中最好的方法,因为如果它找到您要查找的内容,它将停止浏览文件。

请注意,您也可以通过在文本编辑器中打开文件并使用 Ctrl + F 搜索rt=3.878来查找此内容。简单的方法往往是最好的。

答案 2 :(得分:-1)

您可以在=分隔符上拆分每一行,然后在将其从字符串转换为浮点数之后比较结果的第二个索引:

with open("file.txt", "r") as f:
    for line in f.readlines():
        if float(line.split("=")[1]) == 3.878:
            print line

这是split line的样子:

line = "rt=3.878"
print line.split("=")[0] # rt
print line.split("=")[1] # 3.878
print type(line.split("=")[1]) # type 'str'
print type(float(line.split("=")[1])) # type 'float'

更新将此循环替换为仅考虑第一个字符串为" rt"而不是例如"帐户":

with open("file.txt", "r") as f:
    for line in f.readlines():
        if line.split("=")[0] == "rt":
            if float(line.split("=")[1]) == 3.878:
                print line

答案 3 :(得分:-2)

好吧,可能是:

with open ('/home/Desktop/hello.txt', 'r') as f:
         f.readline()
         for line in f:
                 if 'rt=3.878' in line:
                          print(line)