查找文件中的所有特定字符串,并从该行中获取最高值
Finding all specific strings in a file, and get the highest value out of the line
好的,所以我找不到合适的标题,所以我会尽力解释。
我有一个由另一个文件的数据制成的列表,该文件由名称组成,让我们以这样的文件为例 list = ['AAA','BBBB','CCCC','DDDD']
。我想在另一个文件中搜索该列表的所有元素,以及包含它们的所有行。假设我的 txt 文件看起来像这样。
PIN |Direction |MaxUp |MaxDn |MinUp |MinDn |Net
AAA | IN |0.46 |0.039 | -0.006 |0.009 | Top/AAA
AAA | IN |-0.015 |-0.020 | 0.016 |0.030 | Top1/AAA
AAA | IN |0.029 |0.019 | -0.006 |0.009 | Top2/AAA
AAA | IN |0.036 |0.029 | -0.006 |0.009 | Top3/AAA
所以我的代码如下所示:
for string in list:
with open('Text.txt') as file:
for lines in file:
if string in lines:
#Get all lines
#Get the line with the highest maxup and Maxdn
该过程的输出应显示包含我们当前正在查看的字符串的所有行:
在这种情况下它应该显示所有持有 AAA 的 4 行,然后它只会得到具有最高 MaxUp 和 MaxDn 的行,所以输出应该是:
PIN |Direction |MaxUp |MaxDn
AAA | IN |0.46 |0.039
我对我应该做什么有一个大概的想法,但是这个过程需要很长时间,因为我在 for 循环中打开一个文件对我来说似乎有点不对。
首先我们应该清理数据,这意味着删除所有 |
字符以及空格。现在我们将获得可用格式的数据,即 python 列表。这意味着我们可以很容易地比较每一列的值。
所以我们通过遍历搜索词列表中的每个字符串开始搜索行,然后对于我们拥有的每一行数据,我们检查字符串是否在行中,如果是,我们检查看看它是否打破了任何记录,然后我们记录下来。 注意:我已将列表的名称更改为 li,因为列表是 python
中的内置函数
li = ['AAA', 'BBBB', 'CCCC', 'DDDD']
lines = []
first = True
with open('Text.txt') as file:
for line in file:
if first:
first = False
continue
lines.append([x.strip() for x in line.split('|')])
for string in li:
print('Lines containing', string, ':')
maxUp = None
maxDn = None
for line in lines:
if string in line:
if maxUp is None and maxDn is None:
maxUp = line
maxDn = line
print(line)
if line[2] >= maxUp[2]:
maxUp = line
if line[3] >= maxDn[2]:
maxDn = line
print()
print('maxUp:', maxUp)
print('maxDn:', maxDn)
print()
根据您的数据,我得到以下结果:
Lines containing AAA :
['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
['AAA', 'IN', '-0.015', '-0.020', '0.016', '0.030', 'Top1/AAA']
['AAA', 'IN', '0.029', '0.019', '-0.006', '0.009', 'Top2/AAA']
['AAA', 'IN', '0.036', '0.029', '-0.006', '0.009', 'Top3/AAA']
maxUp: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
maxDn: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
Lines containing BBBB :
maxUp: None
maxDn: None
Lines containing CCCC :
maxUp: None
maxDn: None
Lines containing DDDD :
maxUp: None
maxDn: None
好的,所以我找不到合适的标题,所以我会尽力解释。
我有一个由另一个文件的数据制成的列表,该文件由名称组成,让我们以这样的文件为例 list = ['AAA','BBBB','CCCC','DDDD']
。我想在另一个文件中搜索该列表的所有元素,以及包含它们的所有行。假设我的 txt 文件看起来像这样。
PIN |Direction |MaxUp |MaxDn |MinUp |MinDn |Net
AAA | IN |0.46 |0.039 | -0.006 |0.009 | Top/AAA
AAA | IN |-0.015 |-0.020 | 0.016 |0.030 | Top1/AAA
AAA | IN |0.029 |0.019 | -0.006 |0.009 | Top2/AAA
AAA | IN |0.036 |0.029 | -0.006 |0.009 | Top3/AAA
所以我的代码如下所示:
for string in list:
with open('Text.txt') as file:
for lines in file:
if string in lines:
#Get all lines
#Get the line with the highest maxup and Maxdn
该过程的输出应显示包含我们当前正在查看的字符串的所有行:
在这种情况下它应该显示所有持有 AAA 的 4 行,然后它只会得到具有最高 MaxUp 和 MaxDn 的行,所以输出应该是:
PIN |Direction |MaxUp |MaxDn
AAA | IN |0.46 |0.039
我对我应该做什么有一个大概的想法,但是这个过程需要很长时间,因为我在 for 循环中打开一个文件对我来说似乎有点不对。
首先我们应该清理数据,这意味着删除所有 |
字符以及空格。现在我们将获得可用格式的数据,即 python 列表。这意味着我们可以很容易地比较每一列的值。
所以我们通过遍历搜索词列表中的每个字符串开始搜索行,然后对于我们拥有的每一行数据,我们检查字符串是否在行中,如果是,我们检查看看它是否打破了任何记录,然后我们记录下来。 注意:我已将列表的名称更改为 li,因为列表是 python
中的内置函数li = ['AAA', 'BBBB', 'CCCC', 'DDDD']
lines = []
first = True
with open('Text.txt') as file:
for line in file:
if first:
first = False
continue
lines.append([x.strip() for x in line.split('|')])
for string in li:
print('Lines containing', string, ':')
maxUp = None
maxDn = None
for line in lines:
if string in line:
if maxUp is None and maxDn is None:
maxUp = line
maxDn = line
print(line)
if line[2] >= maxUp[2]:
maxUp = line
if line[3] >= maxDn[2]:
maxDn = line
print()
print('maxUp:', maxUp)
print('maxDn:', maxDn)
print()
根据您的数据,我得到以下结果:
Lines containing AAA :
['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
['AAA', 'IN', '-0.015', '-0.020', '0.016', '0.030', 'Top1/AAA']
['AAA', 'IN', '0.029', '0.019', '-0.006', '0.009', 'Top2/AAA']
['AAA', 'IN', '0.036', '0.029', '-0.006', '0.009', 'Top3/AAA']
maxUp: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
maxDn: ['AAA', 'IN', '0.46', '0.039', '-0.006', '0.009', 'Top/AAA']
Lines containing BBBB :
maxUp: None
maxDn: None
Lines containing CCCC :
maxUp: None
maxDn: None
Lines containing DDDD :
maxUp: None
maxDn: None