(Please use reply all so the message gets posted for all to see :>)

On Jul 12, 2012, at 7:14 AM, susana moreno colomer wrote:

> Hi!
> Many thanks for your help.
> Now I am trying this, but I get a blank excel document

Not surprising as there are several errors in your code. In fact, I'm surprised 
it ran without reporting an error. Be sure to copy and paste the code exactly 
as you are running it.

> (I have tried everything, but I don't get it!)

That's why we're here :>)

As I understand it, you have a file structure like this:

dir/
    bb_csvfile1.txt
    bb_csvfile2.txt
    bb_csvfilen.txt
    someotherfile.txt

You want to read each of the csv files which start with 'bb_', extracting the 
data in a certain column, and then output that data to a single excel document. 
Yes?


>  
> import os
> import fnmatch
> import csv
> 
> path = '...'

First of all, this path variable looks odd. Do you mean '.' for the current 
directory or '..' for the parent directory?

> csv_out=csv.writer(open('out11.csv', 'wb'), delimiter='  ')

Since you said you want an excel document, you should specify dialect='excel'  
(or 'excel-tab') instead of a delimiter.

> files=os.listdir(path)
>  
> for infile in files:
>  output=[] 

The variable output should be moved outside the for loop (i.e. put it before 
the "for infile in files:")

>  if fnmatch.fnmatch(infile, 'bb_*'):
>   global filename

Drop the global statement. Out of curiousity, why did you think you needed 
that? (There was no use of global in the example code from Kent Johnson.)

>   filename= path+infile

Won't work (even if the path variable was correct)—where's the file path 
separator? Use the join function of os.path:

filename = os.path.join(path, infile)

>         
>   global f

Again, no need for the global statement.

>   f=open(filename, 'r')
>        
>   for line in f:
>  
>    b=line.split('\t')
>    output.append(b[5].strip())
>   
>    def csvwriter():

No need for a function here. In fact, you don't ever actually call it, so it 
never gets run! That's a major reason why you aren't getting any output.

>     csv_out.append(output)
>     csv_out.append('\n')

These should be outside of the for loops as well (i.e. remove all indentation).
>    
>   f.close


You need the parentheses to call the function and it should be at the same 
level as the call where you open it (i.e. the same amount of indentation, 
before the calls to csv_out.append):

f.close()

Take care,
Don

_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to