Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Join 尝试输出连接两个文件的所有可能组合_Join_Terminal_Grep_Cat_Python - Fatal编程技术网

Join 尝试输出连接两个文件的所有可能组合

Join 尝试输出连接两个文件的所有可能组合,join,terminal,grep,cat,python,Join,Terminal,Grep,Cat,Python,我有一个包含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 我想

我有一个包含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在终端中实现

i、 e

。。。等等

但是,为每一个独特的组合这样做将是一个极其艰难的过程

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

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

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
它将创建三个包含内容的新文件:

==> 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

==>文件1文件2文件1文件3文件2文件3如何保持原始文件的格式。例如,在合并两个文件后,未识别结束行(即,其中一个结果文件如下:锆-n For-form-of-norm-n 15.4607 X锌-n with-iodide-n 8.0430 X锌-n with-amount-of-supplement-n 12.7774 X)我将打印修改为打印(“”.join([f1_数据,f2_数据]+“\n”),file=oh)但这给了我一个错误。你有什么建议?@owwow14:Python3还是Python2?Windows、Linux还是什么操作系统?我使用了Python3(如您的示例中)。我在MacOSx和Linux上都试过了。你是说它删除了所有的换行符吗?真奇怪。我想输入数据的问题要比python的问题多。如果你用新文件创建一个像我这样的测试,它会工作吗?事实上,我确实在三个文件(我命名为:File1 File2和File3)中创建了两行(4个选项卡分隔列)的“试用”文件,其中包含我想要处理的实际文件中的确切内容示例。我检查了文件的编码(我在Mac上使用TextMate创建了它们),上面写着MacOSRoman,应该可以识别新行字符。
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