我有一个文本文件,我想用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)
此代码不返回任何内容。任何人都可以指出我可能做错了什么吗?提前谢谢!
答案 0 :(得分:0)
除了缺少:
的语法错误之外,if 'rt' in line == 3.878
是一个错误。 in
运算符检查成员资格并返回True
或False
,它们分别在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)