Есть ли асинхронный эквивалент javacript функции zip python?
Есть асинхронный итерабельный
class Fasta {
//read file line by line and yield a class based on every four lines
constructor(path) {
this.path = path
const filestream = fs.createReadStream(this.path)
if (this.path.match(/(\.fastq)|(\.fq)$/)) {
this.filetype = 'fastq'
this.handle = readline.createInterface({
input: filestream,
crlfDelay: Infinity
})
} else if (this.path.match(/\.gz$/)) {
this.filetype = 'fqgz'
this.handle = readline.createInterface({
input: filestream.pipe(zlib.createGunzip()),
crlfDelay: Infinity
})
}
}
async * [Symbol.asyncIterator]() {
let counter = 0
const rec = {0: '', 1: '', 2: '', 3: ''}
for await (const line of this.handle) {
if (counter < 3) {
rec[counter] = line.trim()
counter +=1
} else if (counter == 3) {
rec[counter] = line.trim()
counter = 0
yield new Dna(rec[0], rec[1], rec[3])
}
}
}
}
и я хочу сделать что-то подобное.
for await (const i of zip(new Fasta(args.filea), new Fasta(args.fileb))) {
// do the work
}
Я нашел здесь несколько блужданий , но все они, похоже, основаны на Array.map(). Таким образом, мне нужно создать массив для хранения всех данных. Когда файлы большие, все идет не так.
Я пытался
async function * zip(fasta1, fasta2) {
for await (const [i,j] of [fasta1, fasta2]) {
yield [i,j]
}
}
но это дало мне «TypeError: .for не повторяется».
Любая помощь будет оценена по достоинству!