使用 sys argv 遍历目录中具有特定格式的每个文件

Loop through every file with specific format in a directory using sys argv

我想遍历用户给定目录中的每个文件,并对每个以“.fastq”结尾的文件应用特定的转换。

基本上这将是管道:

  1. 用户放置这些文件所在的目录(在命令行中)
  2. 脚本遍历格式为“.fastq”的每个文件并应用特定转换
  3. 脚本以“.fasta”格式保存新输出

这是我的(python 和生物python):

import sys, os
from Bio import SeqIO
from Bio.SeqIO.QualityIO import FastqGeneralIterator
from pathlib import Path

path = Path(sys.argv[1])
print(path)

glob_path = path.glob('*')

for file_path in glob_path:
    if file_path.endswith(".fastq"):
        with open(glob_path, "rU") as input_fq:
            with open("{}.fasta".format(file_path),"w") as output_fa:
                for (title, sequence, quality) in FastqGeneralIterator(input_fq):
                    output_fa.write(">%s\n%s\n" \
                                    % (title, sequence))

if not os.path.exists(path): 
    raise Exception("No file at %s." % path)

我的脚本是 运行,但它没有产生输出(它没有根据需要创建 fasta 文件)。我怎样才能使脚本循环遍历特定目录的文件并将每个文件的全局路径传递到 for 循环,以便读取 input_fq 的内容并将给定的转换保存到 output_fa?

你的问题出在这一行:

with open(glob_path, "rU") as input_fq:

请记住,glob_path 是一个包含 user-supplied 目录中所有文件的列表。您想要打开 file_path,它表示您正在迭代的列表的每个元素:

with open(file_path, "rU") as input_fq:

此外,为了更简洁,您可以通过匹配模式 "*.fastq":

来消除第一个 if 语句
glob_path = path.glob('*.fastq')

for file_path in glob_path:
    with open(file_path, "rU") as input_fq: