No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

103 líneas
2.5KB

  1. #!/usr/bin/env python
  2. import gzip
  3. import os,sys
  4. def isFastq(f):
  5. fqext = (".fq", ".fastq", "fq.gz", ".fastq.gz")
  6. for ext in fqext:
  7. if f.endswith(ext):
  8. return True
  9. return False
  10. ################################
  11. #fastq.reader
  12. class Reader:
  13. def __init__(self, fname):
  14. self.__file = None
  15. self.__gz = False
  16. self.__eof = False
  17. self.filename = fname
  18. if self.filename.endswith(".gz"):
  19. self.__gz = True
  20. self.__file = gzip.open(self.filename, "r")
  21. else:
  22. self.__gz = False
  23. self.__file = open(self.filename, "r")
  24. if self.__file == None:
  25. print("Failed to open file " + self.filename)
  26. sys.exit(1)
  27. def __del__(self):
  28. if self.__file != None:
  29. self.__file.close()
  30. def nextRead(self):
  31. if self.__eof == True or self.__file == None:
  32. return None
  33. lines = []
  34. #read 4 (lines, name, sequence, strand, quality)
  35. for i in range(0,4):
  36. line = self.__file.readline().rstrip()
  37. if len(line) == 0:
  38. self.__eof = True
  39. return None
  40. lines.append(line)
  41. return lines
  42. def isEOF(self):
  43. return False
  44. ################################
  45. #fastq.writer
  46. class Writer:
  47. filename = ""
  48. __file = None
  49. __gz = False
  50. def __init__(self, fname):
  51. self.filename = fname
  52. if self.filename.endswith(".gz"):
  53. self.__gz = True
  54. self.__file = gzip.open(self.filename, "w")
  55. else:
  56. self.__gz = False
  57. self.__file = open(self.filename, "w")
  58. if self.__file == None:
  59. print("Failed to open file " + self.filename + " to write")
  60. sys.exit(1)
  61. def __del__(self):
  62. if self.__file != None:
  63. self.__file.flush()
  64. self.__file.close()
  65. def flush(self):
  66. if self.__file !=None:
  67. self.__file.flush()
  68. def writeLines(self, lines):
  69. if self.__file == None:
  70. return False
  71. for line in lines:
  72. self.__file.write(line+"\n")
  73. return True
  74. def writeRead(self, name, seqence, strand, quality):
  75. if self.__file == None:
  76. return False
  77. self.__file.write(name+"\n")
  78. self.__file.write(seqence+"\n")
  79. self.__file.write(strand+"\n")
  80. self.__file.write(quality+"\n")
  81. return True