簡體   English   中英

蟒蛇; 計算一個文件中的單詞與另一文件中的行

[英]Python; counts words from one file in lines from other file

我有一個帶有單詞的文件,我將它們導入到帶有pandas的python中。 使用我的代碼,我想計算其他文件中的單詞數量,並輸出每個文件中每個單詞的計數。 我正在遍歷多個文件,因此我正在使用glob。 效果很好,但問題在於計數

我的檔案看起來像這樣

>1
GTCTTCCGGCGAGCGGGCTTTTCACCCGCTTTATCGTTACTTATGTCAGCATTCGCACTT
CTGATACCTCCAGCAACCCTCACAGGCCACCTTCGCAGGCTTACAGAACGCTCCCCTACC
>2
AAAGAAAGCGTAATAGCTCACTGGTCGAGTCGGCCTGCGCGGAAGATGTAACGGGGCTAA
ACCATGCACCGAAGCTGCGGCAGCGACACTCAGGTGTTGTTGGGTAGGGGAGCGTTCTGT     

單詞txt文件包含我要查找的單詞。 為了簡化它,例如,它包含單詞“ GTCTT,CCCGC和AACGG”。

使用我的代碼,我想查找這些單詞並用以下代碼計數

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)

我的輸出必須告訴我找到單詞的次數

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

有人可以幫我更改計數代碼嗎? 我不知道怎么做。

我對您的代碼做了一些更改:

#!/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 (以空格分隔)和
  • “ file.txt”帶有帖子中描述的序列的行。

上面的代碼給出了結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM