亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

.split()在python3中創建空白行

.split()在python3中創建空白行

慕的地6264312 2021-03-19 18:15:50
我正在嘗試使用python3將'fastq'文件轉換為制表符分隔的文件。輸入如下:(第1-4行是我需要以制表符分隔的格式打印的一條記錄)。在這里,我試圖將每個記錄讀入一個列表對象:@SEQ_IDGATTTGGGGTT+!''*((((***@SEQ_IDGATTTGGGGTT+!''*((((***使用這個:data = open('sample3.fq')fq_record = data.read().replace('@', ',@').split(',')for item in fq_record:        print(item.replace('\n', '\t').split('\t'))輸出為:['']['@SEQ_ID', 'GATTTGGGGTT', '+', "!''*((((***", '']['@SEQ_ID', 'GATTTGGGGTT', '+', "!''*((((***", '', '']我在輸出的開頭出現空白行,我不明白為什么?我知道這可以通過許多其他方式完成,但是我在學習python時需要弄清楚原因。謝謝
查看完整描述

3 回答

?
大話西游666

TA貢獻1817條經驗 獲得超14個贊

當您使用替換@時,@,您要在字符串的開頭加上一個逗號(因為它以開頭@)。然后,當您分割逗號時,第一個逗號之前沒有任何內容,因此這會在分割中給您一個空字符串。發生的情況基本上是這樣的:


>>> print ',x'.split(',')

['', 'x']

如果您知道數據始終以開頭@,則可以跳過循環中的空記錄。做吧for item in fq_record[1:]。


查看完整回答
反對 回復 2021-03-31
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

您也可以逐行進行,而無需全部替換:


fobj = io.StringIO("""@SEQ_ID

GATTTGGGGTT

+

!''*((((***

@SEQ_ID

GATTTGGGGTT

+

!''*((((***""")


data = []

entry = []

for raw_line in fobj:

    line = raw_line.strip()

    if line.startswith('@'):

        if entry:

            data.append(entry)

        entry = []

    entry.append(line)

data.append(entry)

data 看起來像這樣:


[['@SEQ_ID', 'GATTTGGGGTTy', '+', "!''*((((***"],

 ['@SEQ_ID', 'GATTTGGGGTTx', '+', "!''*((((***"]]


查看完整回答
反對 回復 2021-03-31
  • 3 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號