我在python中有一个程序,它使用两个文件作为输入,并计算它们之间的相似性。我想使用目录中所有可能的文件组合作为输入。如何在我已有的脚本上使用python扩展来实现这一点?
我知道有一些工具,比如可以遍历整个文件的glob。但是,我可以做什么来创建所有不同的文件组合?
此外,作为@hcwhsa和@Ashish Nitin Patil,如何将itertoolsglob结合起来??
谢谢你的洞察力。
更多细节:
我的代码需要两个相同的输入(我有一个大约50个这些文件的目录)。
每个输入都是3个选项卡分隔的列(value1、value2、weight)。
基本上,根据这些信息,我计算出了jaccard系数:

def compute_jaccard_index(set_1, set_2):
    return len(set_1.intersection(set_2)) / float(len(set_1.union(set_2)))

我想为目录中所有可能的文件组合计算这个系数。
到目前为止,我在本地将每个文件调用为:
with open('input_file1', 'r') as infile_B:
with open('input_file2', 'r') as infile_B:

我的目标是遍历目录中所有可能的文件组合。

最佳答案

此片段比较path中的所有文件。

import os
from itertools import combinations

path = r'path/to/dir'
entries = os.listdir(path)
filenames = [os.path.join(path, entry) for entry in entries if os.path.isfile(os.path.join(path, entry))]

for (file1, file2) in combinations(filenames, 2):
    with open(file1) as f1, open(file2) as f2:
        # Compare the files

在Python 3中,它可能做得更优雅一些。
import os
from itertools import combinations

path = r'path/to/dir'
root, _, rel_filenames = next(os.walk(path))
full_filenames = [os.path.join(root, f) for f in rel_filenames]

for (file1, file2) in combinations(full_filenames, 2):
    with open(file1) as f1, open(file2) as f2:
        # Compare the files

关于python - 使用目录中所有可能的文件组合作为python的输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19983057/

10-15 02:03
查看更多