从文件夹中打开多个python文件

时间:2013-04-07 00:05:48

标签: python biopython

我正在尝试获取一个包含9个文件的文件夹,每个文件包含不同基因的FASTA记录,并删除重复记录。我想设置它,以便使用包含基因作为第一个参数的文件夹调用脚本,并使用新文件夹名称重写新文件而不重复。但是,如果文件存储在当前目录中名为results的文件夹中,则不允许我打开该文件夹中的任何基因文件来处理重复项。我已经四处搜索了,似乎我应该能够使用如下文件名的字符串调用python的open()函数:

input_handle = open(f, "r")

这行不允许我打开文件来读取它的内容,我认为它可能与f的类型有关,当我调用type(f)时它显示为'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()

1 个答案:

答案 0 :(得分:2)

试试input_handle = open(os.path.join(os.getcwd,results/f), "r")os.curdir返回.请参阅mail.python.org/pipermail/python-list/2012-September/631864.html。