使用目录中所有可能的文件组合作为python的输入

时间:2013-11-14 16:31:28

标签: python

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

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

另外,作为@hcwhsa和@Ashish Nitin Patil,itertools如何与glob组合?

感谢您的任何见解。

更多细节:

我的代码需要2个相同的输入(我有一个大约50个这些文件的目录)。 每个输入都是3-tab分隔列(value1,value2,weight)。 基本上使用这些信息,我计算了jaccard系数here

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:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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()替换为您的目录路径。