gpt4 book ai didi

python - 如何根据 id 从给定的文本文件中提取字符串的第一个、第二个和最后一个实例?

转载 作者:太空宇宙 更新时间:2023-11-04 01:52:36 25 4
gpt4 key购买 nike

我有一个文本文件,其中包含以下形式的字符串:

66_0M100
66_1M101
66_2M102
66_3M103
66_4M103
66_5M103
67_0M100
67_1M102
67_2M105
67_3M103
67_4M106

“M”前的数字代表实例数。我必须提取每个 id 的第一个、第二个和最后一个实例(id 是字符串的第一部分,在下划线之前。这里是 66 和 67)。此外,如果有任何 id 没有至少 3 个实例,则应忽略。

例如,id 66 和 67 的输出将是:

66_0M100 (1st instance of 66)
66_1M101 (2nd instance of 66)
66_5M103 (last instance of 66)
67_0M100 (1st instance of 67)
67_1M102 (2nd instance of 67)
67_4M106 (last instance of 67)

此输出应写入新的文本文件。

我尝试了以下代码,它为我提供了第一个和第二个实例,但我无法提取最后一个实例。

import numpy as np
from collections import defaultdict
data = defaultdict(list)
for fileName in ["list.txt"]:
with open(fileName,'r') as file1:
for line in file1:
col1,col2 = line.split("_")
for i in np.unique(col1):
id1,id2 = col2.split("M")
if ((int(id1) == 0) or (int(id1) == 1)):
print(line)

最佳答案

一个简单的正则表达式、groupby 和 itemgetter 可以解决这个问题:

from itertools import groupby
from operator import itemgetter
import re

pat = re.compile(r'^(\d\d)_')

def search_for_id(line):
m = pat.search(line)
return m.group(1) if m else ''

with open('list.txt') as f:
which_ones = itemgetter(0, 1, -1)

for id_key, group in groupby(f, search_for_id):
items = list(group)
if id_key and len(items) >= 3:
selected_items = which_ones([x.strip() for x in items])
print(selected_items)

关于python - 如何根据 id 从给定的文本文件中提取字符串的第一个、第二个和最后一个实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57680783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com