[Tutor] WRITING XLS FROM OS.WALK()
Steven D'Aprano
steve at pearwood.info
Sat Oct 9 05:55:47 CEST 2010
On Sat, 9 Oct 2010 06:34:44 am Susana Iraiis Delgado Rodriguez wrote:
> Hello members:
> I developed a Python module to make a list which contains all the
> files ending with .shp and .dbf extensions, I have solved this
> already,
I'm sorry to tell you that you've just reinvented the wheel. This was
already solved, a long, long time ago. It is called the glob module:
>>> import glob
>>> glob.glob("/home/steve/*.jpg")
['/home/steve/hoversonic.jpg', '/home/steve/seperated_at_birth.jpg']
>>> glob.glob("/home/steve/*.txt")
['/home/steve/woss.txt', '/home/steve/file.txt', '/home/steve/post.txt']
You should use that. It works, it is tested and thoroughly debugged, and
it is powerful.
> but now I want to write an excel file from it. The file
> should show the full path from the found files.
Excel files are a proprietary, secret, binary file format. There is a
Python project to allow reading and writing Excel files, but since it
has to reverse-engineer the secret format, there's no guarantee that it
will work. Having said that, I believe that it is very reliable, but
I've never used it myself.
Google on "python read write excel files" for more information.
However, if your only aim is to make the data available to Excel, and
you don't care what sort of file you use, the best way is the standard
interchange format between spreadsheet applications, the comma-
separated value file, or CSV. This is a plain-text file, and Python
comes with a module for reading and writing them. From the interactive
interpreter, run this for more information:
import csv
help(csv)
> This is the code:
>
> import os
> a = open ("directorio.xls","w")
Just because you name a file .xls doesn't make it an actual Excel file,
any more than taking a JPEG and renaming it "word.exe" would turn it
into the Microsoft Word application.
> allfiles = [] #store all files found
> for root,dir,files in os.walk("C:\\"):
> filelist = [ os.path.join(root,fi) for fi in files if
> fi.endswith(".shp") or fi.endswith(".dbf") ]
This isn't your actual code. I know this, because the indentation is
broken and it gives a syntax error.
> for f in filelist:
> allfiles.append(f)
This is better written as:
allfiles.extend(filelist)
but of course it is better to use the glob module.
> for i in allfiles:
> print i
> a.write(i)
> a.write("\n")
The name "i" is normally used for integers, not file names. It would be
better to write that as:
for filename in allfiles:
print filename
a.write(filename + '\n')
--
Steven D'Aprano
More information about the Tutor
mailing list