【问题标题】:Searching for float value in .txt file在 .txt 文件中搜索浮点值
【发布时间】:2022-01-20 10:01:25
【问题描述】:

我有一个程序可以保存一个包含多个值和文本的 .txt 日志。每次运行程序时,这些时间值可能不同,但它们在此 .txt 文件中的位置始终相同。我需要获取这些值并检查它们是否小于 6 秒。我试图将我的 .txt 文件转换为字符串,然后使用:

x = string(filename[50:55])
float(x)

但它似乎不起作用。如何从 .t​​xt 文件中的固定位置提取值,然后将它们转换为浮点数?

//编辑:

下面是我的日志照片,我想检查那些标有蓝线的值:

//EDIT2:

另一张日志的照片,我将如何提取这些百分比,必须低于 70 才能通过。

//EDIT3:我得到的错误照片和代码片段:

with open(r'C:\Users\Time_Log.txt') as f:
    print(f)
    lines = f.readlines()
    print(r'Lines: ')
    print(lines)
    print(r'Type of lines:', type(lines))
# start at 1 to avoid the header
    for line in range(1, len(lines)):
        print(r'Type of line:', type(line))
        splits = line.split("|")
        print(r'Type of splits:', type(splits))
        t = splits[3].split(".")
        if t[0] < 6:
            print(r'Test completed. Startup time is shorter than 6 seconds')

【问题讨论】:

  • 浮动的位置总是一样的吗?否则,您应该查看正则表达式。您可以编辑您的帖子并添加一些输入文件的行吗?
  • 请贴一个日志文件的例子,否则任何人都很难正确回答
  • 照片已添加,请查看。

标签: python string type-conversion txt


【解决方案1】:

我的意思是举个例子会简单得多,但假设你的值有一个固定的距离(idk 空间或制表符),你会split 与它的字符串并查看你想要比较的元素,所以 idk 如果时间是你的第 6 个项目,你会 string.split(" ") 并选择 splitted_str[5]。如果您的时间格式遵循常规模式 idk hours:minutes:seconds 然后进行数学运算,您可以进一步执行此操作,或者您甚至可以使用 datetime 之类的包将它们转换为某个时间对象,这可能做一些更有用的比较。

所以问题基本上是您的值的格式如何。

编辑: 所以给出这个例子你可以:

with open("filename.txt") as f:
    lines = f.readlines()
    # start at 1 to avoid the header
    for i in range(3, len(lines)):
        splits = lines[i].split("|")
        t = str(splits[3]).split(".")
        if int(t[0)] < 6:
             [do something with that line]
          

【讨论】:

  • 感谢您的回答。我更新了我的问题,请检查。
  • 但是是的,这些值总是在同一个地方,并且总是具有相同的格式 - D.DDD
  • 非常感谢您的回答。我有点忘了,但我还有第二个日志文件,它有不同的值要检查,但我认为你的想法也可以应用在那里。我应该如何修改你给的这段代码?
  • 是的,你几乎会做类似的事情,所以检查 |然后检查空间并使用您想要的列。此外,如果您可以在数据中找到可靠的模式,您也可以尝试一下:docs.python.org/3/howto/regex.html
  • 好的,我设法通过将变量 t[] 首先转换为“str”,然后转换为“float”来解决这个问题。现在脚本按预期遍历每个值并比较每个值:拆分:['C:106E308','AlgoProxy_ISRHandler','504581794','4.220','60.256','0.307\n'] ['4', '220'] 4.220 4.22 测试完成。启动时间短于 6 秒但我仍然收到错误:t = str(splits[3]).split(".") IndexError: list index out of range。但是通过使用'range(3, len(lines)-2) 解决了这个问题,因此它在具有最终值的行之后立即停止。谢谢你的帮助。
猜你喜欢
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2012-01-15
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多