我有一个包含
等数据的文本文件EASSDS.txt 2738
EQQSDS7M.txt 394
EOG66.txt 354
EASSDS.txt 292
EQQSDS7M.txt 301
我希望它只应选择最小值并删除最大值
Output.txt
EOG66.txt 354
EASSDS.txt 292
EQQSDS7M.txt 301
如果找到副本,它只选择具有最小值的问题,如我在输出和输入中显示的
以下是我试过的代码
with open('input.txt') as nums:
lines = re.findall(r'\w+\.txt\s+\d+', nums.read())
numbers = {}
for line in lines:
line_split = re.split(r'\.txt\s+', line)
count = line_split[1]
numbers[line_split[0]] = int(line_split[1])
答案 0 :(得分:3)
我只想在这里使用defaultdict
的简单方法。
>>> from collections import defaultdict
>>> m = defaultdict(list)
>>> with open('testFile.txt' ,'r') as f:
for line in f:
name, val = line.split()
m[name].append(val)
>>> m
defaultdict(<type 'list'>, {'EOG66.txt': ['354'], 'EASSDS.txt': ['2738', '292'], 'EQQSDS7M.txt': ['394', '301']})
>>> with open('output.txt', 'w') as f:
for elem in m:
f.write("{} {}\n".format(elem, min(map(int, m[elem]))))
这给了我一个类似
的输出EOG66.txt 354
EASSDS.txt 292
EQQSDS7M.txt 301
答案 1 :(得分:2)
你几乎就在那里,但请记住,如果您已将索引编入索引,则需要一些分支逻辑,如下所示:
number = {}
for line in lines:
split_line = line.split()
if numbers.get(split_line[0], False):
numbers[split_line[0]] = min(numbers[split_line[0]], int(split_line[1]))
else:
numbers[split_line[0]] = int(split_line[1])
另外,如果我错了,请纠正我,但似乎你的价值观总是在他们之间有空间,所以你不需要破坏正则表达式分裂锤,而且正则表达式总是很好。如果这会破坏您的测试集中的某些内容,请告诉我。