从列表中删除字符串并返回最大值

2024-10-03 00:20:28 发布

您现在位置:Python中文网/ 问答频道 /正文

import subprocess
awk1 = subprocess.check_output("awk '{print $1}' "+file+"").decode("utf-8")
print(awk1)

这个代码给出了我想要的结果;我使用AWK,因为我发现提取$2-$5比使用Python更容易

当我打印awk1时,它给了我

HEADER
DESCRIPTION (can be over multiple lines)
TEST TYPE 
RESULTS (numbers below are just examples)
-999.00
-500
-100.15
+1
+23.111
+500

我想做的是确定是否有任何结果大于-500。我试图使用max(),但这是抛出错误,因为我有str和int的存在。同样出于某种原因,如果我尝试将其放入循环(for i in akw1…)中,它将垂直打印它,例如

1
0
0
.
1
5

Instead of 100.15

结果开头的行可以具有不同的长度,结果中的行也可以包含字符串。哪种方法最有效地删除字符串,然后确定数字是否大于指定数量?多谢各位


Tags: 字符串代码importoutputcheckdescriptionutffile
1条回答
网友
1楼 · 发布于 2024-10-03 00:20:28

subprocess.check_output()将返回bytes(类似str)。因此,对它进行迭代将得到每个单独的字符,例如"H",然后"E",然后"A",等等

您可以做的是首先用换行符"\n"将其拆分。然后在列表上迭代并尝试转换为int。如果可以转换,请检查它是否超过-500。否则,如果无法转换,则忽略它并移动到下一个

from contextlib import suppress

awk1 = b"""HEADER
DESCRIPTION (can be over multiple lines)
TEST TYPE 
RESULTS (numbers below are just examples)
-999.00
-500
-100.15
+1
+23.111
+500"""

for text in awk1.decode().split(b'\n'):
    with suppress(Exception):
        if float(text) > -500:
            print("Found", text)
            break
else:
    print("Not found")

输出

Found b'-100.15'

相关问题 更多 >