我在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:
我的目标是在目录中的所有可能的文件组合上迭代该函数。
答案 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()
替换为您的目录路径。