ich eine xxx.wig.gz-Datei haben, die drei Milliarden Zeilen in einem solchen Format haben:Python-Skript langsam lesen und schreiben gz Dateien
fixedStep chrom=chr1 start=1 step=1
0
0
0
0
0
1
2
3
4
5
6
7
8
9
10
...
fixedStep chrom=chr2 start=1 step=1
0
0
0
0
0
11
12
13
14
15
16
17
18
19
20
...
und ich möchte
- brechen sie durch "Chrom". Jedes Mal, wenn ich eine Zeile lese, die mit "fixedstep" beginnt, erstelle ich eine neue Datei und schließe die alte.
- Ich mag 0/1 Ausgabe von jedem Wert auf eine „Schwelle“ zu vergleichen, pass = 1 sonst 0
unten ist mein Python-Skript, das super langsam läuft (ich bin Projizieren ~ 10 Stunden zu beenden, so weit 2 Chromosomen nach ~ 1 Stunde)
kann jemand mir helfen, es zu verbessern?
#!/bin/env python
import gzip
import re
import os
import sys
fn = sys.argv[1]
f = gzip.open(fn)
fo_base = os.path.basename(fn).rstrip('.wig').rstrip('.wig.gz')
fo_ext = '.bt.gz'
thres = 100
fo = None
for l in f:
if l.startswith("fixedStep"):
if fo is not None:
fo.flush()
fo.close()
fon = re.search(r'chrom=(\w*)', l).group(0).split('=')[-1]
fo = gzip.open(fo_base + "_" + fon + fo_ext,'wb')
else:
if int(l.strip())>= thres:
fo.write("1\n")
else:
fo.write("0\n")
if fo is not None:
fo.flush()
fo.close()
f.close()
PS. Ich nehme an, awk kann es viel schneller tun, aber ich bin nicht großartig mit awk
Können Sie ein Beispiel geben, wie die Ausgabe für die Beispieldaten zur Verfügung gestellt aussehen würde? Es scheint, als wären das 2 Dateien, vielleicht chr1 und chr2. Was wären die Inhalte von Chr1 und Chr2? Sie haben Recht, dass awk in der Lage ist, es ziemlich schnell zu tun, vermute ich, aber ich möchte sicherstellen, dass es Ihre Testdaten übergibt. – Andrew