Определенное решение: следует отметить, что оно должно быть таким же простым, как при итерации, чтобы оно было добавлением к списку ... Однако следует отметить, что большая проблема, почему это не сработало для меня, заключается в том, что я использовал и IDE (Spyder 4.1.3), и когда я запустил код, он не выполнил желаемый результат. Однако, если я сохраню его в py-скрипте и выполню, у него не будет проблем с добавлением данных через итерацию ...
Вывод - если использовать IDE и запустить тест проблем, выполнив весь скрипт чтобы исключить ошибку IDE.
У меня есть класс, который я собираюсь использовать для анализа некоторых данных. Я успешно использовал его и создал переменную, которая сохраняет вывод этого класса. Я могу использовать a для l oop, чтобы увидеть проанализированные данные, но я не могу сохранить их в реальном списке. Может ли кто-нибудь помочь мне получить эти данные?
Class:
You can use this code and put it in your own script
class ParseFastQ(object):
"""Returns a read-by-read fastQ parser analogous to file.readline()"""
def __init__(self,filePath,headerSymbols=['@','+']):
"""Returns a read-by-read fastQ parser analogous to file.readline().
Exmpl: parser.__next__()
-OR-
Its an iterator so you can do:
for rec in parser:
... do something with rec ...
rec is tuple: (seqHeader,seqStr,qualHeader,qualStr)
"""
if filePath.endswith('.gz'):
self._file = gzip.open(filePath)
else:
self._file = open(filePath, 'rU')
self._currentLineNumber = 0
self._hdSyms = headerSymbols
def __iter__(self):
return self
def __next__(self):
"""Reads in next element, parses, and does minimal verification.
Returns: tuple: (seqHeader,seqStr,qualHeader,qualStr)"""
# ++++ Get Next Four Lines ++++
elemList = []
for i in range(4):
line = self._file.readline()
self._currentLineNumber += 1 ## increment file position
if line:
elemList.append(line.strip('\n'))
else:
elemList.append(None)
# ++++ Check Lines For Expected Form ++++
trues = [bool(x) for x in elemList].count(True)
nones = elemList.count(None)
# -- Check for acceptable end of file --
if nones == 4:
raise StopIteration
# -- Make sure we got 4 full lines of data --
assert trues == 4,\
"** ERROR: It looks like I encountered a premature EOF or empty line.\n\
Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._currentLineNumber)
# -- Make sure we are in the correct "register" --
assert elemList[0].startswith(self._hdSyms[0]),\
"** ERROR: The 1st line in fastq element does not start with '%s'.\n\
Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._hdSyms[0],self._currentLineNumber)
assert elemList[2].startswith(self._hdSyms[1]),\
"** ERROR: The 3rd line in fastq element does not start with '%s'.\n\
Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._hdSyms[1],self._currentLineNumber)
# -- Make sure the seq line and qual line have equal lengths --
assert len(elemList[1]) == len(elemList[3]), "** ERROR: The length of Sequence data and Quality data of the last record aren't equal.\n\
Please check FastQ file near line number %s (plus or minus ~4 lines) and try again**" % (self._currentLineNumber)
# ++++ Return fatsQ data as tuple ++++
return tuple(elemList)
#
Вызов этого класса для создания переменной:
fastqfile=ParseFastQ('filepath')
Затем я хотел определить, что это за класс, поскольку он не позволял мне извлекать проанализированные данные fasqdata
In: type(fastqfile)
Out: __main__.ParseFastQ
Эта часть кода позволит мне распечатать весь вывод
for fastq_obj in fastqfile:
#This is the header
print(fastq_obj[0])
Я попытался извлечь эти данные и сохранить их в списке ...
seqHeader=[]
for fastq_obj in fastqfile:
#This is the header
seqHeader.append(print(fastq_obj[0]))
Я тоже попытался. продлить, и ничего не было сохранено
Любая помощь будет оценена