作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Python 和生物信息学领域的新手。我正在使用 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'
再次编辑:谢谢 Dan,我昨天已经解决了这个问题。似乎 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
最佳答案
在这一行:
text = gzip.open(file,'r').read()
file
是文件名而不是完整路径,所以
fullpath = os.path.join(path, file)
text = gzip.open(fullpath,'r').read()
关于 F.readlines()[:10]
会将整个文件读入行列表,然后取前 10 行
import itertools
list(itertools.islice(F.xreadlines(),10))
这不会将整个文件读入内存,只会将前 10 行读入列表
但是因为 gzip.open 返回一个没有 .xreadlines() 的对象,但是因为文件在它们的行上是可迭代的:
list(itertools.islice(F,10))
会像这个测试显示的那样工作:
>>> import gzip,itertools
>>> list(itertools.islice(gzip.open("/home/dan/Desktop/rp718.ps.gz"),10))
['%!PS-Adobe-2.0\n', '%%Creator: dvips 5.528 Copyright 1986, 1994 Radical Eye Software\n', '%%Title: WLP-94-int.dvi\n', '%%CreationDate: Mon Jan 16 16:24:41 1995\n', '%%Pages: 6\n', '%%PageOrder: Ascend\n', '%%BoundingBox: 0 0 596 842\n', '%%EndComments\n', '%DVIPSCommandLine: dvips -f WLP-94-int.dvi\n', '%DVIPSParameters: dpi=300, comments removed\n']
关于python - Gzip 问题、回溯和 IOError : [Errno 2] No such file or directory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6481001/
我是一名优秀的程序员,十分优秀!