Я новичок в области питона и биоинформатики. Я использую Python-2.6. Теперь я пытаюсь выбрать все файлы fastq.gz, затем gzip.open (всего несколько строк, потому что он слишком большой и тратит время), затем посчитать 'J', а затем выбрать эти файлы с количеством 'J', НЕ равным до 0.
Вот мой код:
#!/usr/bin/python
import os,sys,re,gzip
path = "/home/XXX/nearline"
for file in os.listdir(path):
if re.match('.*\.recal.fastq.gz', file):
text = gzip.open(file,'r').readlines()[:10]
word_list = text.split()
number = word_list.count('J') + 1
if number !== 0:
print file
Но я получил несколько ошибок:
Traceback (most recent call last):
File "fastqfilter.py", line 9, in <module>
text = gzip.open(file,'r').readlines()[:10]
File "/share/lib/python2.6/gzip.py", line 33, in open
return GzipFile(filename, mode, compresslevel)
File "/share/lib/python2.6/gzip.py", line 79, in __init__
fileobj = self.myfileobj = __builtin__.open(filename, mode or 'rb')
IOError: [Errno 2] No such file or directory: 'ERR001268_1.recal.fastq.gz'
Что это за трассировка: Файл ......
Что-то не так с gzip?
И почему он не может найти ERR001268_1.recal.fastq.gz? Это первый файл fastq в списке, и он там существует.
Надеюсь, дайте мне несколько подсказок и укажите на любые другие ошибки в сценарии.
Большое спасибо.
Редактировать: спасибо всем. Я последовал предложению Дэна. И я сначала попробовал ОДИН файл fastq. Мой сценарий выглядит так:
#!/usr/bin/python
import os,sys
import gzip
import itertools
file = gzip.open('/home/xug/nearline/ERR001274_1.recal.fastq.gz','r')
list(itertools.islice(file.xreadlines(),10))
word_list = list.split()
number = word_list.count('J') + 1
if number != 0:
print 'ERR001274_1.recal.fastq.gz'
Тогда ошибки:
Traceback (most recent call last):
File "try2.py", line 8, in <module>
list(itertools.islice(text.xreadlines(),10))
AttributeError: GzipFiles instance has no attribute 'xreadlines'
Снова отредактируйте: Спасибо, Дэн, я вчера решил проблему. Кажется, GzipFiles не поддерживает xreadlines. Поэтому я попробовал аналогичный способ, как вы предложили позже И это работает. Смотрите ниже:
#!/usr/bin/python
import os,sys,re
import gzip
from itertools import islice
path = "/home/XXXX/nearline"
for file in os.listdir(path):
if re.match('.*\.recal.fastq.gz', file):
fullpath = os.path.join(path, file)
myfile = gzip.open(fullpath,'r')
head = list(islice(myfile,1000))
word_str = ";".join(str(x) for x in head)
number = word_str.count('J')
if number != 0:
print file