我正在尝试使用一个包含 9 个文件的文件夹,每个文件都包含不同基因的 FASTA 记录,并删除重复记录。我想设置它,以便使用包含基因的文件夹作为第一个参数调用脚本,并使用新文件夹名称来重写新文件而不重复。但是,如果文件存储在当前目录中名为 results 的文件夹中,则不允许我打开该文件夹中的任何基因文件来处理它们的重复项。我四处搜索,似乎我应该能够使用这样的文件名字符串调用 python 的 open() 函数:
input_handle = open(f, "r")
此行不允许我打开文件来读取其内容,我认为这可能与 f 的类型有关,当我调用 type(f) 时显示为 type 'str'
另外,如果我使用完整路径:
input_handle = open('~/Documents/Research/Scala/hiv-biojava-scala/results/rev.fa', "r")
它说不存在这样的文件。我检查了我的拼写,我确定该文件确实存在。如果我尝试将其名称称为原始字符串,我也会得到该文件不存在:
input_handle = open(r'~/Documents/Research/Scala/hiv-biojava-scala/results/rev.fa', "r")
或者,如果我尝试将其称为以下内容,则表示不存在全局结果:
input_handle = open(os.path.join(os.curdir,results/f), "r")
这是完整的代码。如果有人知道问题出在哪里,我将非常感谢您提供的任何帮助。
#!/usr/bin/python
import os
import os.path
import sys
import re
from Bio import SeqIO
def processFiles(files) :
for f in files:
process(f)
def process(f):
input_handle = open(f, "r")
records = list(SeqIO.parse(input_handle, "fasta"))
print records
i = 0
while i < len(records)-1:
temp = records[i]
next = records[i+1]
if (next.id == temp.id) :
print "duplicate found at " + next.id
if (len(next.seq) < len(temp.seq)) :
records.pop(i+1)
else :
records.pop(i)
i = i + 1
output_handle = open("out.fa", "w")
for record in records:
SeqIO.write(records, output_handle, "fasta")
input_handle.close()
def main():
input_folder = sys.argv[1]
out_folder = sys.argv[2]
if os.path.exists(out_folder):
print("Folder %s exists; please specify empty folder or new one" % out_folder)
sys.exit(1)
os.makedirs(out_folder)
files = os.listdir(input_folder)
print files
processFiles(files)
main()