.split()在python3中创建空行

2024-09-29 17:21:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python3将中的“fastq”文件转换为制表符分隔的文件。 输入如下:(第1-4行是我需要以制表符分隔格式打印的一条记录)。在这里,我尝试将每个记录读入列表对象:

@SEQ_ID
GATTTGGGGTT
+
!''*((((***
@SEQ_ID
GATTTGGGGTT
+
!''*((((***

使用这个:

^{pr2}$

输出为:

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

我在输出的开头有一个空行,我不明白为什么?? 我知道这可以通过很多其他方法来实现,但是我需要在学习python的过程中找出原因。 谢谢


Tags: 文件对象方法id列表格式记录seq
3条回答

谢谢大家的回答。作为一个初学者,我的主要问题是.split(',')上出现了一个空白行,我现在已经从概念上理解了这一点。所以我用python编写的第一个有用的程序是:

# this script converts a .fastq file in to .fasta format

import sys 
# Usage statement:
print('\nUsage: fq2fasta.py input-file output-file\n=========================================\n\n')

# define a function for fasta formating
def format_fasta(name, sequence):
fasta_string = '>' + name + "\n" + sequence + '\n'
return fasta_string

# open the file for reading
data = open(sys.argv[1])
# open the file for writing
fasta = open(sys.argv[2], 'wt')
# feed all fastq records in to a list 
fq_records = data.read().replace('@', ',@').split(',')

# iterate through list objects
for item in fq_records[1:]: # this is to avoid the first line which is created as blank by .split() function
    line = item.replace('\n', '\t').split('\t')
    name = line[0]
    sequence = line[1]      
    fasta.write(format_fasta(name, sequence))
fasta.close()

随着我了解的更多,答案中提到的其他事情对我来说会更清楚。 再次感谢。在

您也可以一行一行地进行替换,而不必进行所有替换:

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如下所示:

^{pr2}$

@替换为,@时,在字符串的开头加一个逗号(因为它以@开头)。然后,当你用逗号拆分时,第一个逗号之前没有任何内容,因此在拆分中会得到一个空字符串。基本上是这样的:

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

如果您知道数据总是以@开头,则可以跳过循环中的空记录。只要做for item in fq_record[1:]。在

相关问题 更多 >

    热门问题