On Tue, 19 Nov 2013 16:30:46 -0800, Victor Hooi wrote:

> Hi,
> 
> Is either approach (try-excepts, or using libmagic) considered more
> idiomatic? What would you guys prefer yourselves?

Specifically in the case of file types, I consider it better to use 
libmagic. But as a general technique, using try...except is a reasonable 
approach in many situations.


> Also, is it possible to use either approach with a context manager
> ("with"), without duplicating lots of code?
> 
> For example:
> 
> try:
>       with gzip.open('blah.txt', 'rb') as f:
>               for line in f:
>                       print(line)
> except IOError as e:
>       with open('blah.txt', 'rb') as f:
>               for line in f:
>                       print(line)
> 
> I'm not sure of how to do this without needing to duplicating the
> processing lines (everything inside the with)?

Write a helper function:

def process(opener):
    with opener('blah.txt', 'rb') as f:
        for line in f:
            print(line)


try:
    process(gzip.open)
except IOError:
    process(open)


If you have many different things to try:


for opener in [gzip.open, open, ...]:
    try:
        process(opener)
    except IOError:
        continue
    else:
        break



[...]
> Also, on another note, python-magic will return a string as a result,
> e.g.:
> 
> gzip compressed data, was "blah.txt", from Unix, last modified: Wed Nov
> 20 10:48:35 2013
> 
> I suppose it's enough to just do a?
> 
>     if "gzip compressed data" in results:
> 
> or is there a better way?

*shrug*

Read the docs of python-magic. Do they offer a programmable API? If not, 
that kinda sucks.



-- 
Steven
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to