2017-09-23 8 views
1

私は単語を含むファイルを持っています。私はそれらをpandasでpythonにインポートします。私のコードでは、他のファイルの単語の数を数え、単語ごとのカウントをファイルごとに出力したいと考えています。私は複数のファイルをループしているので、globを使用しています。それが正常に動作しますが、問題は数えるPython;あるファイルの単語を他のファイルの行に数えます。

私のファイルは、私が探しています単語を含むこの

>1 
GTCTTCCGGCGAGCGGGCTTTTCACCCGCTTTATCGTTACTTATGTCAGCATTCGCACTT 
CTGATACCTCCAGCAACCCTCACAGGCCACCTTCGCAGGCTTACAGAACGCTCCCCTACC 
>2 
AAAGAAAGCGTAATAGCTCACTGGTCGAGTCGGCCTGCGCGGAAGATGTAACGGGGCTAA 
ACCATGCACCGAAGCTGCGGCAGCGACACTCAGGTGTTGTTGGGTAGGGGAGCGTTCTGT  

ワードtxtファイルのように見えています。簡略化するために、例えば、 "GTCTT、CCCGC、AACGG"という単語が含まれています。私のコードで

、私はこれらの単語を探して、私の出力は、単語が

>1 
GTCTT 1 
CCCGC 1 
AACGG 0 
>2 
GTCTT 0 
CCCGC 0 
AACGG 1 

を発見されたどのように多くの時間を教えなければなりません

次のコードで

import pandas as pd 
import glob 
from itertools import groupby 

word = pd.read_csv("word.txt", delim_whitespace=True,header=None) 

for file in glob.glob('input.txt'): 
    with open(file) as f: 
     for k, g in groupby(f, lambda x: x.startswith('>')): 
      if k: 
       sequence = next(g).strip('>\n') 
      else: 
       d1 = list(''.join(line.strip() for line in g)) 
       counts = Counter() 

       if d1 == word: 
        counts[d1] += 1 
        print(counts) 
それらをカウントすることができる人カウントのコードを変更するのを手伝ってください。どうやったらよいかわかりません。

答えて

0

私はあなたのコードビットを変更:上記のコードで

#!/usr/bin/env python 

with open('file.txt','r') as f: l = f.read().splitlines() 
with open('word.txt', 'r') as f: words = f.read().split() 

nl = [i for s in [[j,l[i+1]+l[i+2]]for i,j in enumerate(l) if '>' in j] for i in s] 

counts = {} 
for i in nl: 
    if '>' in i: 
     print i 
     counts = {} 
    else: 
     counts = {w:i.count(w) for w in words} 
     for k,v in counts.items(): print '{} {}'.format(k,v) 

  • "word.txtは" GTCTT CCCGC AACGG(スペース区切り)と
  • 「ファイルなどの単語が含まれています投稿に記載されているようなシーケンスの行を「.txt」表示します。

上記のコードは、結果として得られる:

>1 
AACGG 0 
GTCTT 1 
CCCGC 1 
>2 
AACGG 1 
GTCTT 0 
CCCGC 0 
+0

はい、これは動作します。どうもありがとう! – Gravel

+0

@Gravelよろしくお願いします! – coder

関連する問題