amr...@iisermohali.ac.in wrote:

> I tried to join these two files together using command.......
> 
> from itertools import izip
> from os.path import exists
> 
> def parafiles(*files):
>     vec = (open(f) for f in files if exists(f))
>     data = izip(*vec)
>     [f.close() for f in vec]
>     return data
> 
> for data in parafiles('/home/amrita/alachems/chem1.txt',
> '/home/amrita/secstr/secstr.txt'):
>     print ' '.join(d.strip() for d in data)

parafiles has a bug: vec is a generator and hence cannot be run twice. 
Therefore the odd [f.close()...] list comprehension (don't use a list comp 
if you don't care about the result!) has no effect. 

If you change vec into a list you will be hit by another problem -- the for 
loop trying to operate on closed files. While the correct approach probably 
involves a contextlib.contextmanager I recommend that you concentrate on 
your real problem and keep parafiles() simple:

def parafiles(*files):
    open_files = (open(f) for f in files if exits(f))
    return izip(*open_files)

> it just joined the column of two files.

Can you make an effort to express clearly what you want, preferrably with a 
simple and unambiguous example?

Please keep the line widths below the threshold of 78 characters to avoid 
messing it up on its way to the reader.

Peter

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to