[BioPython] suggestion on Fasta.index_file()
Brad Chapman
chapmanb at uga.edu
Mon Nov 24 11:53:50 EST 2003
Hi Chunlei;
> However, the generated index file stores the absolute path for
> fasta_seq_file,
It should just store the filename for whatever you pass to the
index_file function. The relevant code from Bio/Fasta/__init__.py
is:
def index_file(filename, indexname, rec2key=None):
[...]
index[Dictionary._Dictionary__filename_key] = filename
So, if you just pass relative paths, you shouldn't have any problem
with absolute file names. A solution you could use in your code
without needing to modify Biopython is to do:
start_dir = os.getcwd()
os.chdir("whatever/the/directory/is")
index_file("the_file.fasta", "the_index.idx")
os.chdir(start_dir)
Then you would have an index with a relative path and you could
change into this directory later to open the index.
os.chdir("whatever/the/directory/is")
dict = Fasta.Dictionary("the_index.idx")
> For my case, I store fasta_seq_file and its index file at a network
> drive and I need to access it from both windows and linux server. The
> original index file can not be used for both environments. To solve this
> problem, I modified two lines of Bio/Fasta/__init__.py as below. As the
> result, it require the index file is placed at the same directory of
> fasta_seq_file.
[...]
> Do you it's worth to make this modification? Or, any better solution?
I'm not a big fan of restricting the index file and fasta file to
the same directory. A backwards compatible solution would be to
allow Dictionary to take a filename the index points to as an
optional argument.
def __init__(self, indexname, parser=None, filename = None):
self._index = Index.Index(indexname)
if filename:
self._handle = open(filename)
else:
self._handle = open(self._index[Dictionary.__filename_key])
self._parser = parser
Does this solution seem reasonable? Or will the os.chdir solution
work for you?
Hope this helps.
Brad
More information about the BioPython
mailing list