我正在使用python,需要匹配多个数据文件的字符串。 首先,我用pickle解压缩文件,然后将它们放入列表中。 我只想匹配具有相同条件的字符串。 此条件显示在字符串的末尾。

我的工作脚本大致如下所示:

import pickle

f = open("data_a.dat")
list_a = pickle.load( f )
f.close()

f = open("data_b.dat")
list_b = pickle.load( f )
f.close()

f = open("data_c.dat")
list_c = pickle.load( f )
f.close()

f = open("data_d.dat")
list_d = pickle.load( f )
f.close()


for a in list_a:
    for b in list_b:
        for c in list_c
            for d in list_d:
                 if a.GetName()[12:] in b.GetName(): 
                      if a.GetName[12:] in c.GetName():
                         if a.GetName[12:] in d.GetName():
                              "do whatever"

这似乎对这两个列表都适用。 当我尝试添加更多的8或9个数据文件时,这些问题就开始了,而我也需要为它们匹配相同的条件。 简单的脚本将无法处理,并且会卡住。 我感谢您的帮助。

编辑:每个列表都包含以用于创建它们的参数命名的直方图。 直方图的名称在字符串的末尾包含这些参数及其值。 在示例中,我对2个数据集进行了处理,现在我想对9个数据集进行处理,而无需使用多个循环。

编辑2.我只是扩展了代码以更准确地反映我想要做的事情。 现在,如果我尝试对9个列表执行此操作,那么它不仅看起来很恐怖,而且也不起作用。

===============>>#1 票数:0

意料之外:

files = ["file_a", "file_b", "file_c"]
sets = []

for f in files:
    f = open("data_a.dat")
    sets.append(set(pickle.load(f)))
    f.close()

intersection = sets[0].intersection(*sets[1:])

编辑:好吧,我忽略了您对x.GetName()[12:]的映射,但是您应该能够减少设置逻辑的问题。

===============>>#2 票数:0

这是您可以启发的一小段代码。 主要思想是使用递归函数。

为了简单起见,我承认我已经在列表中加载了数据,但是您可以在之前从文件中获取它们:

data_files = [
    'data_a.dat',
    'data_b.dat',
    'data_c.dat',
    'data_d.dat',
    'data_e.dat',
]

lists = [pickle.load(open(f)) for f in data_files]

而且由于并没有真正获得您真正需要做的细节,因此我的目标是找到四个首字符的匹配项:

def do_wathever(string):
    print "I have match the string '%s'" % string

lists = [
    ["hello", "world", "how", "grown", "you", "today", "?"],
    ["growl", "is", "a", "now", "on", "appstore", "too bad"],
    ["I", "wish", "I", "grow", "Magnum", "mustache", "don't you?"],
]

positions = [0 for i in range(len(lists))]

def recursive_match(positions, lists):
    strings = map(lambda p, l: l[p], positions, lists)
    match = True
    searched_string = strings.pop(0)[:4]
    for string in strings:
        if searched_string not in string:
            match = False
            break
    if match:
        do_wathever(searched_string)


    # increment positions:
    new_positions = positions[:]
    lists_len = len(lists)
    for i, l in enumerate(reversed(lists)):
        max_position = len(l)-1
        list_index = lists_len - i - 1
        current_position = positions[list_index]
        if max_position > current_position:
            new_positions[list_index] += 1
            break
        else:
            new_positions[list_index] = 0
            continue

    return new_positions, not any(new_positions)


search_is_finished = False

while not search_is_finished:
    positions, search_is_finished = recursive_match(positions, lists)

当然,您可以在这里优化很多事情,这是草稿代码,但看看递归函数 ,这是一个主要概念。

===============>>#3 票数:0

最后,我最终使用了内置的地图功能。 我意识到现在我应该比以前更加明确(以后将要做)。

我的数据文件是带有5个参数的直方图,有些带有3或4个参数。

par1=["list with some values"]
par2=["list with some values"]
par3=["list with some values"]
par4=["list with some values"]
par5=["list with some values"]

我需要检查针对参数值的每种可能组合绘制的数量的行为。 最后,我得到一个数据文件,其中包含〜300个直方图,每个直方图的名称均已标识,并带有相应的参数值和样品名称。 看起来像

datasample1-par1=val1-par2=val2-par3=val3-par4=val4-par5=val5
datasample1-"permutation of the above values"
...
datasample9-par1=val1-par2=val2-par3=val3-par4=val4-par5=val5
datasample9-"permutation of the above values"    

因此,我为9个数据文件中的每一个获得了300个直方图,但是幸运的是,所有这些直方图都是以相同的顺序创建的。 因此,我可以只使用内置的地图将它们配对。 我将数据文件解压缩,将每个文件放到列表中,然后使用map函数将每个直方图与其在其他数据样本中的相应配置配对。

for lst in map(None, data1_histosli, data2_histosli, ...data9_histosli):  
  do_something(lst)

这解决了我的问题。 谢谢大家的帮助!

  ask by davids translate from so

未解决问题?本站智能推荐:

1回复

提高lmfit中多个数据集拟合的速度? 字符串调用限制

我想用形状(161,14)拟合数据集,其中行是能量方向,而cols是在不同实验条件下相同光谱的重排。 数据集中应该有3个不同的峰,因此我建立了三个语音的复合模型。 目标是共享参数,以使原声的中心和宽度相同。 我发现了与Python和lmfit有关的问题:如何使用共享参数拟合多个数据
1回复

在Python中匹配2个数据帧列的字符串

我有两个数据框: DF1: 原始df有1000+名称 第二个Df: 原始df有1000+ Item_Name 预期产出: 我的代码: 当前的挑战 当name具有Paper并且Item_Name具有Paper Bag时str.contains
2回复

Python中动态数据集的字符串计数

我的问题与这里的其他人非常相似,但是我没有找到我想要的确切答案,因此我希望Python的资深用户能够进一步帮助我。 我正在为自己的工作学习脚本方法,但是它们不会将我送往培训中心学习,因此我的首席技术官说我应该学习如何从摘要的Wireshark收集报告中创建日志文件。 我在Bash方面很幸
3回复

在2个数据集之间匹配列中的值,更新多个列

我有两个数据框: 我想通过匹配id来获取df2的这些值来更新df1中的col1 , col2 , col3中的值: 由于我的实际数据框更大,因此我想使用要更新的列名列表: 如何使用此列名称获得所需的结果? 我提到了这个问题 , 这个问题使我使用.loc但我不知道如何
3回复

Python:匹配字符串中的多个子字符串

我正在使用Python,并且想将给定的字符串与多个子字符串进行匹配。 我试图以两种不同的方式解决这个问题。 我的第一个解决方案是将子字符串与字符串匹配: 结果为temp = [“ TEST”,“ MATCH”,“ MULTIPLE”,“ RING”] 但是,这不是我想要的结果。
1回复

使用多个数据集在python中绘制热图

我有一个列表FFT数据,我想在一个热图中绘制。 每个数据集都有自己的X和Y.通常我会使用Seaborn和Panda数据帧绘制热图,因为频率对所有集合都是通用的,但现在频率列对于每个数据集都是唯一的。 我们如何从这种数据中绘制热图? 也就是说,我有许多数据集 X1,Y1 X2
1回复

将多个数据集可视化为python中的相交圆

我有几个列表,其中包含用户ID,我想将它们可视化为相交的圆圈(每个圆圈的面积等于列表长度)。 有没有可以帮助我完成此任务的python库?
1回复

在Python中从字符串中捕获多个数据点

我对Python非常陌生,并且徒劳地尝试搜索这个确切的问题 - 我可以找到几个类似的问题,但没有一个非常适合,我想我现在正在远离它。 我的总体目标是从大量表单中收集特定数据点以导出到csv。 我已经开始将.txt文件作为一个巨大的字符串(可能不是最好的)引入Python,但现在我仍然停留
1回复

是否可以对Python中两个数据集中的字符串出现进行有意义的测试

我有两组数据都是从不同来源编译的。 两组数据均包含出现频率高的单词。 我想检查两个数据集中是否存在某个特定单词,如果它们同时存在,是否有可能进行某种意义上的统计检验以证明该单词具有重要意义。 如果单词“ apple”出现在两个数据集(dict1和dict2)中,则计算单词apple的
4回复

最有效的分割字符串的方法,例如python中的rubik的多维数据集表示法?

如果给出了类似"RL2R'F2LD'"的字符串,将其拆分为字符串"R" "L2" "R'" "F2" "L" "D'"的最有效方法是什么? 我尝试了几种方法,例如首先将它们拆分为单个字符,然后尝试将它们添加到列表中,但没有任何正常工作。