第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Python:讀取文本文件并將文件拆分為列表變量,每個(gè)變量各有4行

Python:讀取文本文件并將文件拆分為列表變量,每個(gè)變量各有4行

拉風(fēng)的咖菲貓 2021-03-31 13:14:58
我有一個(gè)文本文件(fastq文件)。該文件的格式1st line - ID2nd Line - Sequence3rd Line - something4th Line - something else.然后再次重復(fù)這4行。例如:1  @M98903933932 ATCTGTAAAA3 +4 FG%@ATAAAA5  @M98903933946 ATGTCTATCC7 +8 AA%$$983089我正在嘗試做的是,分割此文件,以便可以按4行讀取此文件。我可以制作一個(gè)列表,每個(gè)變量每個(gè)包含4行。在上面的示例中,我將列出帶有2個(gè)變量的列表。
查看完整描述

3 回答

?
素胚勾勒不出你

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超9個(gè)贊

使用生成器,您可以定義一個(gè)惰性讀取器,該讀取器每次都會(huì)生成4個(gè)值的列表。


您可以如下所述耗盡或延遲迭代生成器。


import csv

from io import StringIO


mystr = StringIO("""1  @M9890393393

2 ATCTGTAAAA

3 +

4 FG%@ATAAAA

5  @M9890393394

6 ATGTCTATCC

7 +

8 AA%$$983089

""")


def gen():

    # replace mystr with open('file.csv', 'r')

    with mystr as fin:

        reader = csv.reader(fin, delimiter=' ',  skipinitialspace=True)

        res = []

        for line in reader:

            res.append(line[1])

            if len(res) == 4:

                yield res

                res = []

用盡發(fā)電機(jī):


lines = list(gen())


print(lines)


[['@M9890393393', 'ATCTGTAAAA', '+', 'FG%@ATAAAA'],

 ['@M9890393394', 'ATGTCTATCC', '+', 'AA%$$983089']]

迭代生成器:


for line in gen():

    print(line)


['@M9890393393', 'ATCTGTAAAA', '+', 'FG%@ATAAAA']

['@M9890393394', 'ATGTCTATCC', '+', 'AA%$$983089']


查看完整回答
反對 回復(fù) 2021-04-09
?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

fastq格式易于解析,您可以在行的開頭開始檢查“ @”。那就是你的序列號(hào)。然后,您可以簡單地追加接下來的3行,然后重新開始。如果質(zhì)量得分行也以“ @”開頭,則可能會(huì)出現(xiàn)一種“罕見”的問題情況。但是,即使這種情況也很容易發(fā)現(xiàn),因?yàn)橘|(zhì)量得分行始終位于“ +”行之后。


查看完整回答
反對 回復(fù) 2021-04-09
?
開心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

如果您只想將其分成4個(gè),則可以使用:


In []:

with open('your_file') as f:

    result = list(zip(*[map(str.strip, f)]*4))   # Assumes Py3+ use iter(map(...)) in Py2

result


Out[]:

[('@M9890393393', 'ATCTGTAAAA', '+', 'FG%@ATAAAA'),

 ('@M9890393394', 'ATGTCTATCC', '+', 'AA%$$983089')]

為每個(gè)變量創(chuàng)建變量的想法通常沒有多大意義,但dict如果第一行包含您要使用的ID,則可能有用:


In []:

with open('your_file') as f:

    result = {head: tail for head, *tail in zip(*[map(str.strip, f)]*4)}

result

Out[]:

{'@M9890393393': ['ATCTGTAAAA', '+', 'FG%@ATAAAA'],

 '@M9890393394': ['ATGTCTATCC', '+', 'AA%$$983089']}

抱歉,假設(shè)為示例添加了行號(hào),而不是數(shù)據(jù)集的一部分。您可以將替換為zip()以下以刪除數(shù)字(從@jpp的答案中借用):


from operator import itemgetter


zip(*[map(itemgetter(1), csv.reader(f, delimiter=' ', skipinitialspace=True))]*4)


查看完整回答
反對 回復(fù) 2021-04-09
  • 3 回答
  • 0 關(guān)注
  • 418 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)