2

我有一个程序,python其中使用两个文件作为输入 - 并计算它们之间的相似性。我想使用目录中所有可能的文件组合作为输入。如何使用 python扩展我已经拥有的脚本来做到这一点?

我知道有一些工具glob可以遍历整个文件。但是,我还能做些什么来创建所有不同的文件组合?

另外,作为@hcwhsa 和@Ashish Nitin Patil,如何itertoolsglob??

感谢您的任何见解。

更多细节:

我的代码需要 2 个相同的输入(我有大约 50 个这些文件的目录)。每个输入都是 3 个制表符分隔的列(值 1、值 2、权重)。基本上有了这些信息,我计算了 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:

我的目标是在目录中所有可能的文件组合上迭代函数。

4

2 回答 2

3

此代码段比较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
于 2013-11-14T16:43:02.530 回答
2
import itertools
import os
for file_1, file_2 in itertools.combinations(os.listdir(os.getcwd()), 2):
    print(file_1, file_2)
    # compare the files

替换os.getcwd()为您的目录路径。

于 2013-11-14T16:35:58.560 回答