我正在寫一個python腳本(版本2.7),它將把指定目錄內的每個輸入文件(.nexus格式)變成.fasta格式。 Biopython模塊SeqIO.convert完全處理單個指定文件的轉換,但當我嘗試使用os.walk在目錄上自動執行進程時,我無法將每個輸入文件的路徑名正確傳遞到SeqIO.convert。我哪裏錯了?我是否需要使用os.path模塊中的join()並將完整的路徑名傳遞給SeqIO.convert?如何在目錄中的多個文件上傳遞Biopython SeqIO.convert()?
#Import modules
import sys
import re
import os
import fileinput
from Bio import SeqIO
#Specify directory of interest
PSGDirectory = "/Users/InputDirectory」
#Create a class that will run the SeqIO.convert function repeatedly
def process(filename):
count = SeqIO.convert("files", "nexus", "files.fa", "fasta", alphabet= IUPAC.ambiguous_dna)
#Make sure os.walk works correctly
for path, dirs, files in os.walk(PSGDirectory):
print path
print dirs
print files
#Now recursively do the count command on each file inside PSGDirectory
for files in os.walk(PSGDirectory):
print("Converted %i records" % count)
process(files)
當我運行該腳本,我得到這個錯誤信息: Traceback (most recent call last): File "nexus_to_fasta.psg", line 45, in <module> print("Converted %i records" % count) NameError: name 'count' is not defined
This conversation是非常有益的,但我不知道在哪裏插入連接()函數語句。 Here is an example of one of my nexus files 感謝您的幫助!
順便說一句,如果用法類似於SeqIO不返回任何東西(它只是轉換一個文件,也許),你可以只寫程序(FULLPATH ),同時知道len(文件)會告訴你你處理了多少文件。 – celeritas
這非常有幫助!但我仍然得到這個錯誤:'回溯(最近通話最後一個): 文件「nexus_to_fasta.psg」 41行,在 印刷工藝(FULLPATH) 文件「nexus_to_fasta.psg」 35行,在過程 回報SeqIO.convert(「files」,「nexus」,「files.fa」,「fasta」,alphabet = IUPAC.ambiguous_dna) File「/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ site_packages/Bio/SeqIO/__init__.py「,第899行,轉換爲 in_handle = open(in_file,」rU「) IOError:[Errno 2]沒有這樣的文件或目錄:'files'' –
PGilbert
從你調用convert的方式;在查看seqIO.convert的文檔後,我更新了答案。 – celeritas