I made a video demonstrating some ways model DNA structures with string, so grab some string and follow along!
Wednesday, September 25, 2013
Learning about DNA topology by playing with string
The only way I was ever able to get any kind of intuitive feel for DNA topology was to play with string, twisting it, wrapping it, untwisting it etc.
I made a video demonstrating some ways model DNA structures with string, so grab some string and follow along!
(also my first foray into youtube, I'm not sure if or when I'll ever post anything else there though, but I think this turned out ok)
I made a video demonstrating some ways model DNA structures with string, so grab some string and follow along!
Friday, September 6, 2013
python crossplatform handling of wildcard command line arguments
Windows and Linux shells handle wildcard arguments differently. Linux (at least under bash) expands wildcard arguments before passing them to a program. Windows passes them without expanding them. This leads to trouble if you want to write a command line utility that will work correctly in both Linux and Windows (or even one compatible with wildcard arguments at all in Windows).
In Python, the typical way to expand a wildcard is with the glob module.
either: glob.glob to return a list, or glob.iglob to return an iterator (which may be preferable if a large list is expected).
Here's a solution that uses the argparse and glob modules:
see also: http://stackoverflow.com/questions/12501761/passing-multple-files-with-asterisk-to-python-shell-in-windows
In Python, the typical way to expand a wildcard is with the glob module.
either: glob.glob to return a list, or glob.iglob to return an iterator (which may be preferable if a large list is expected).
Here's a solution that uses the argparse and glob modules:
import argparse
from glob import glob
def main(file_names):
print file_names
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("file_names", nargs='*')
#nargs='*' tells it to combine all positional arguments into a single list
args = parser.parse_args()
file_names = list()
#go through all of the arguments and replace ones with wildcards with the expansion
#if a string does not contain a wildcard, glob will return it as is.
for arg in args.file_names:
file_names += glob(arg)
main(file_names)
One caveat is that I have noticed that python and bash don't sort the expanded lists in the same way, so if for some reason you need deterministic sorting of input, you should sort the resulting list yourself.
see also: http://stackoverflow.com/questions/12501761/passing-multple-files-with-asterisk-to-python-shell-in-windows
Subscribe to:
Posts (Atom)