[BioPython] suggestion on Fasta.index_file()

Brad Chapman chapmanb at uga.edu
Mon Nov 24 17:07:23 EST 2003


Hi Chunlei;

> I see. I think giving a optional filename argument is more flexible.

Okay -- I've checked the change in CVS as I described below. Thanks
for the feedback!

Brad



> Brad Chapman wrote:
> 
> >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 
> >_______________________________________________
> >BioPython mailing list  -  BioPython at biopython.org
> >http://biopython.org/mailman/listinfo/biopython
> >
> > 
> >
> 
> 
> _______________________________________________
> BioPython mailing list  -  BioPython at biopython.org
> http://biopython.org/mailman/listinfo/biopython


More information about the BioPython mailing list