1

さまざまなサブフォルダーに多数のfastaファイル(これらは単なるテキストファイルです)があります。私が必要としているのは、同じ名前のファイルをディレクトリで検索し、それらを入力ファイルの名前のファイルに連結する方法です。これを行う必要がある10000以上の遺伝子があるため、これを手動で行うことはできません。

これまでのところ、ディレクトリの1つを調べ、それらのファイル名を使用して他のディレクトリを検索する次のPythonコードがあります。これにより、各ファイルのフルパスを含むリストが返されます。

    import os
    from os.path import join, abspath

    path = '/directoryforfilelist/'    #Directory for source list
    listing = os.listdir(path)

    for x in listing:
        for root, dirs, files in os.walk('/rootdirectorytosearch/'):
            if x in files:
            pathlist = abspath(join(root,x))

私が立ち往生しているのは、同じ名前のファイルを連結する方法です。このスクリプトの結果は次のようになります。

    /directory1/file1.fasta
    /directory2/file1.fasta
    /directory3/file1.fasta
    /directory1/file2.fasta
    /directory2/file2.fasta
    /directory3/file2.fasta

この場合、最終結果は、同じ名前のファイルのそれぞれからのテキストを含むfile1.fastaとfile2.fastaという名前の2つのファイルである必要があります。

ここからどこへ行くかについてのリードをいただければ幸いです。とにかく私はPythonでこの部分を実行しましたが、仕事を成し遂げることは私にとっては問題ありません。それが重要な場合、これはMacで実行されています。

4

2 に答える 2

0

リストの各ファイルに対して、追加モードでターゲット ファイルを割り当て、ソース ファイルの各行を読み取り、それをターゲット ファイルに書き込みます。

ターゲット フォルダーが最初は空であり、/rootdirectorytosearch にないと仮定します。

于 2013-03-12T21:39:23.200 に答える
0

テストされていませんが、大まかに次のようにします。

from itertools import groupby
import os

def conc_by_name(names):
    for tail, group in groupby(names, key=os.path.split):
        with open(tail, 'w') as out:
           for name in group:
              with open(name) as f:
                  out.writelines(f)

これにより、現在のフォルダーにファイル (例ではfile1.fastaと) が作成されます。file2.fasta

于 2013-03-12T21:40:53.540 に答える