(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 - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor