簡體   English   中英

從文本文件中讀取行,如果特定單詞 == 100,則打印該行

[英]Read lines from text file and if a specific word == 100, print the line

我有一個要使用 python 閱讀的文本文件。 文本文件包含單詞和一個值,例如 (rt= 3.878)。 我想使用 python 編寫一個腳本來讀取文本文件,如果 rt in line 是 == 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)

此代碼不返回任何內容。 誰能指出我可能做錯了什么? 提前致謝!

除了缺少:的語法錯誤, 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

由於您的文件似乎具有非常規則的格式,您可以將其轉換為字典:

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來找到此內容。 簡單的方法往往是最好的。

您可以在=分隔符上拆分每一行,然后在將結果從字符串轉換為浮點數后比較結果的第二個索引:

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

這是line split樣子:

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”而不是例如“ACCOUNT”的行:

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

也許會:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM