将文件夹中的 fasta 文件连接成 python 中的单个文件

Concatenating fasta files in folder into single file in python

我有多个 fasta 序列文件存储在我当前工作目录中的一个文件夹中(称为“序列”),我正在尝试将所有序列合并到一个文件中以 运行 MUSLCE 多序列比对.

这是我目前所拥有的,它在 output_fas.close() 之前一直有效,在那里我收到错误消息 FileNotFoundError: [Errno 2] No such file or directory: './序列'

代码如下:

 import os
os.getcwd() #current directory
DIR = input("\nInput folder path containing FASTA files to combine into one FASTA file: ")
os.chdir(DIR)
FILE_NAME = input("\nWhat would you like to name your output file (e.g. combo.fas)? Note: "
                  "Please add the .fas extension: ")
output_fas = open(FILE_NAME, 'w')
file_count = 0

for f in os.listdir(DIR):
    if f.endswith(( ".fasta")):
        file_count += 1
        fh = open(os.path.join(DIR, f))
        for line in fh:
            output_fas.write(line)
        fh.close()

output_fas.close()
print(str(file_count) + " FASTA files were merged into one file, which can be found here: " + DIR)

当我输入目录时,我将其输入为“./Sequences”,这成功地更改了目录。

不太确定该怎么做。我之前调整了代码,它成功地创建了所有序列连接在一起的新文件,但是它 运行 连续并且不会结束并且每个序列都有多次重复。

感谢您的帮助!

错误应该发生在 output_fas.close() 之前,并且应该在 os.listdir(DIR) 调用时看到。问题是 DIR 一旦执行 os.chdir(DIR) 命令就变得毫无意义。 DIR 作为相对路径提供,os.chdir(DIR) 更改为新目录,使旧相对路径相对于新目录不再正确。

如果您要使用 os.chdir(DIR),则永远不要再使用 DIR,只需将循环更改为:

# Use with statement for guaranteed deterministic close at end of block & to avoid need
# for explicit close
with open(FILE_NAME, 'w') as output_fas:
    file_count = 0
    for f in os.listdir():  # Remove DIR to list current directory
        if f.endswith(".fasta"):
            file_count += 1
            # Use a with for same reason as above
            with open(f) as fh: # Don't join to DIR because f is already correctly in current directory
                output_fas.writelines(fh)  # writelines does the loop of write calls for you