我是python的新手所以我的代码中可能存在新手错误。我有一个大文本,类似于下面的文字。
data.txt中
Apple
12 83 84 85 96 83 84
19 93 84 21 83 94 72
37 84 95 10 94 65 35
63 83 85 18 83 85 83
Banana
12 28 39 26 88 90 38
25 37 88 99 80 74 26
17 25 36 46 54 63 79
89 96 14 26 31 43 56
我需要我的代码才能找到单词Banana(或特定单词)并找到最后一列中的最大数字并打印出来。我的计划是制作一个循环,检查Banana这个词是否在线并继续进行直到找到该单词。接下来,我将最后一列中的所有数字保存到变量,并使用命令查找最大数字并打印它。到目前为止,这是我的代码
file = open("/home/user/data.txt", 'r')
lines = file.readlines()
file.close()
for line in lines:
if "Banana" in line:
for line in lines:
parts = line.split()
if len(parts) > 1:
column2 = parts[6]
print(max(column2))
else:
pass
以下是我的代码提供的内容
8
7
5
8
6
9
6
由于某种原因,代码打印出来自每一行的最大数字(即使我希望它忽略所有期望香蕉字下的数字),并认为数字是一位数字。在找到单词Banana的第一个循环之后,代码转到文本文件的开头,然后从每一行找到最大的数字。如何使我的代码只检查特定单词后面的数字?有人能告诉我我的代码有什么问题吗?我在Linux上使用python 3.6.5-3。谢谢!
答案 0 :(得分:0)
您可以使用itertools.groupby
将数字与数字分开,这些数字可用于创建具有最后一列最大值的字典:
import itertools
import re
with open('data.txt') as f:
new_data = list(filter(None, [i.strip('\n') for i in f]))
new_groups = [list(b) for _, b in itertools.groupby(new_data, key=lambda x:x.isalpha())]
d = {new_groups[i][0]:list(map(lambda x:list(map(int, x.split())), new_groups[i+1])) for i in range(0, len(new_groups), 2)}
maxs = {a:max([i[-1] for i in b]) for a, b in d.items()}
print(maxs['Banana'])
输出:
79
答案 1 :(得分:0)
这将为您提供每行的最后一个数字:
data = "12 83 84 85 96 83 84"
print [ int(x) for x in data.split() ].pop()
一个完整的例子:
input = """
Apple
12 83 84 85 96 83 84
19 93 84 21 83 94 72
37 84 95 10 94 65 35
63 83 85 18 83 85 83
Banana
12 28 39 26 88 90 38
25 37 88 99 80 74 26
17 25 36 46 54 63 79
89 96 14 26 31 43 56
"""
foundIt = False
vals = []
for line in input.split("\n"):
if "" == line:
continue
if "Banana" == line:
foundIt = True
continue;
if foundIt:
print line
try:
vals.append( [ int(x) for x in line.split() ].pop())
except:
break;
print vals
print max(vals)
输出:
12 28 39 26 88 90 38
25 37 88 99 80 74 26
17 25 36 46 54 63 79
89 96 14 26 31 43 56
[38, 26, 79, 56]
79
答案 2 :(得分:0)
在"Banana"
之后找到行,使用.split()[-1]
获取这些行的最后一个数字并找到它们的最大数量:
check = False
numbers = []
with open('file.txt') as f:
for line in f:
if check and line:
numbers.append(int(line.split()[-1]))
if line.strip() == 'Banana':
check = True
print(max(numbers))
# 79
答案 3 :(得分:0)
file = open("a.txt", 'r')
lines = file.readlines()
file.close()
banana = False
maximum = 0
for line in lines:
if "Banana" in line:
banana = True
if banana:
try:
number = int(line.split()[6])
if number > maximum:
maximum = number
#print(number)
except(IndexError):
pass
print (maximum)
我使用了一个变量,一旦看到“香蕉”就会设置为true。我也用try catch来避免空白行。然后我找到了最大数量