You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

生成QIIME2 manifest文件的Python脚本出现SyntaxError错误

问题:QIIME2单端测序Manifest文件生成脚本语法错误

需求说明

我编写了Python脚本用于生成QIIME2的manifest文件(包含fastq数据绝对路径,方便导入QIIME2),输入为存储样本名的文本文件(格式示例:SRR123456 SRR123457 SRR123458...)和fastq文件目录,运行命令为python ./manifest_single.py --input-dir seqs。

我的脚本

#!/local/cluster/bin/python3

# assign a variable to the file of interest
file_name = "seq.by.sys_accession.txt"
dir = "/filepath/seqs"

# open the file with a file handle
read_SRR = open(file_name, "r")

# obtain a list of lines in your file
allLines_list = read_SRR.readlines()

# create output file
outFile = "manifest.txt"

read_outFile = open(outFile, "w")
read_outFile.write(f"sample-id\tabsolute-filepath\n")

# loop over the body of data lines until the end of the file
for rawLine in allLines_list:
    line = rawLine.strip()
    print(f"|{line}|")
    with open(outFile, "a") as f:
        read_outFile.write(f"{line}\t{dir}/{line}.R1.fastq.gz\n")

outFile.close()
read_SRR.close()

报错信息

运行脚本时持续触发语法错误:

[name@congo metagenome-analysis]$ python ./manifest_single.py --input-dir seqs
  File "./manifest_single.py", line 17
    read_outFile.write(f"sample-id\tabsolute-filepath\n")
                                                       ^
SyntaxError: invalid syntax

我尝试将\t和\n替换为字面制表符,也反复检查输入文件结构和内容,但问题仍未解决。


解决方案

核心原因:f-string版本兼容性问题

脚本使用了Python 3.6及以上版本才支持的f-string语法,但你实际运行脚本的Python版本可能低于3.6,或者脚本开头shebang指定的Python版本与运行时python命令指向的版本不一致。

具体修复步骤

  1. 验证Python版本匹配
    运行以下命令确认版本:

    python --version
    /local/cluster/bin/python3 --version
    

    如果python指向Python 2或低于3.6的Python 3,改用python3执行脚本:

    python3 ./manifest_single.py --input-dir seqs
    
  2. 替换f-string为兼容写法(若无法升级Python)
    将所有f-string替换为str.format()语法:

    • 原代码:read_outFile.write(f"sample-id\tabsolute-filepath\n")
      改为:read_outFile.write("sample-id\tabsolute-filepath\n")
    • 原代码:print(f"|{line}|")
      改为:print("|{}|".format(line))
    • 原代码:read_outFile.write(f"{line}\t{dir}/{line}.R1.fastq.gz\n")
      改为:read_outFile.write("{}\t{}/{}.R1.fastq.gz\n".format(line, dir, line))
  3. 修复脚本其他潜在问题

    • 循环内重复打开输出文件会导致句柄冲突,直接移除with open(outFile, "a") as f:行,仅用初始打开的read_outFile写入即可。
    • 脚本未处理--input-dir命令行参数,需添加argparse模块解析参数,替换硬编码的目录路径。

修复后的完整脚本

#!/local/cluster/bin/python3
import argparse

# 解析命令行参数
parser = argparse.ArgumentParser(description='Generate QIIME2 manifest file for single-end reads')
parser.add_argument('--input-dir', required=True, help='Directory containing fastq files')
args = parser.parse_args()

# 样本名文件路径
file_name = "seq.by.sys_accession.txt"
dir = args.input_dir

# 读取样本名
read_SRR = open(file_name, "r")
allLines_list = read_SRR.readlines()

# 创建输出文件
outFile = "manifest.txt"
read_outFile = open(outFile, "w")
read_outFile.write("sample-id\tabsolute-filepath\n")

# 循环写入每条记录
for rawLine in allLines_list:
    line = rawLine.strip()
    if not line:  # 跳过空行
        continue
    print("|{}|".format(line))
    read_outFile.write("{}\t{}/{}.R1.fastq.gz\n".format(line, dir, line))

# 关闭文件句柄
read_outFile.close()
read_SRR.close()

内容的提问来源于stack exchange,提问作者Geomicro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:02:48