将文件夹中的 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
我有多个 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