0

我有一个包含 24 个不同文件的文件夹,它们都具有相同的制表符分隔格式:

这是一个例子:

zinc-n  with-iodide-n   8.0430  X
zinc-n  with-amount-of-supplement-n 12.7774 X
zinc-n  with-value-of-horizon-n 14.5585 X
zirconium-n as-valence-n    11.3255 X
zirconium-n for-form-of-norm-n  15.4607 X

我想以 2 的每种可能组合加入文件。

例如,我想加入文件 1 和文件 2、文件 1 和文件 3、文件 1 和文件 4……等等,直到我有 552 个文件的输出,考虑到所有唯一组合,将每个文件与每个其他文件连接起来

我知道这可以在终端中使用 cat 来完成。

IE

cat File1 File2 > File1File2
cat File1 File3 > File1File3

... 等等。

但是,为每个独特的组合执行此操作将是一个极其费力的过程。

例如,是否有可能使用终端中的命令行和 grep 来自动化这个过程以加入所有独特的组合?或者可能是比 CAT 更优化的解决方案的另一个建议。

4

1 回答 1

1

您可以尝试使用。我使用模块中的combinations()函数和每对文件的内容。请注意,我使用缓存来避免多次读取每个文件,但您可能会耗尽内存,因此请使用最适合您的方法:itertoolsjoin()

import sys 
import itertools

seen = {}

for files in itertools.combinations(sys.argv[1:], 2): 
    outfile = ''.join(files)
    oh = open(outfile, 'w')

    if files[0] in seen:
        f1_data = seen[files[0]]
    else:
        f1_data = open(files[0], 'r').read()
        seen[files[0]] = f1_data

    if files[1] in seen:
        f2_data = seen[files[1]]
    else:
        f2_data = open(files[1], 'r').read()
        seen[files[1]] = f2_data

    print('\n'.join([f1_data, f2_data]), file=oh)

一个测试:

假设三个文件的内容如下:

==> file1 <==
file1 one
f1 two

==> file2 <==
file2 one
file2 two

==> file3 <==
file3 one
f3 two
f3 three

像这样运行脚本:

python3 script.py file[123]

它将创建三个包含内容的新文件:

==> file1file2 <==
file1 one
f1 two
file2 one
file2 two


==> file1file3 <==
file1 one
f1 two
file3 one
f3 two
f3 three


==> file2file3 <==
file2 one
file2 two
file3 one
f3 two
f3 three
于 2013-10-22T11:18:00.857 回答