Reading files into a 2D list.

Oyvind Ostlund Oyvind.Ostlund at cern.ch
Wed May 11 10:10:08 EDT 2005


 Thanks a lot. That works great. I can't belive how close I was in the end. Well that was the last lines of this application, so thanks a lot.

And thanks for the tip about the portability stuff. I can't belive I didn't think about that. Been writing to much in non portable languages and libs like DirectX lately.


Thanks
ØØ

-----Original Message-----
From: Larry Bates [mailto:lbates at syscononline.com] 
Sent: Wednesday, May 11, 2005 3:55 PM
To: Oyvind Ostlund
Cc: python-list at python.org
Subject: Re: Reading files into a 2D list.

Few observations.

1) Don't concatenate pathnames yourself use os.path.join, that makes your code portable.

lexi_file = open(os.path.join(sys.path[0],"lexi",files), "r")

2) Start with an empty list and append your "lines" lists:

files_and_lines=[]
filenumber = 0

for files in file_names:
    fpath=os.path.join(sys.path[0]),"lexi", files)
    try:
        lexi_file = open(fpath, "r")
        files_and_lines.append(lexi_file.readlines())

    except(IOError):
        print "Something went wrong trying to read the file:"
        print "'%s'" % fpath

lexi_file.close() # Remember to close each file

Now you have:

files_and_lines[0][0] -> Line 1 of the first file files_and_lines[0][1] -> Line 2 of the first file .
.
.
files_and_lines[0][n] -> Line n of the first file files_and_lines[1][0] -> Line 1 of the second file .
.
.

Larry Bates

Oyvind Ostlund wrote:
> I am not sure what the right syntax is here. So please help me out (started 2 days ago).
> 
> I have a list of about 20 files that I want to read line by line into a 2D list. So the first dimension will be each file, and the second every line in that file.
> 
> 
> I tried to do something like this:
> 
>     files_and_lines = [][]
>     filenumber = 0
>     
>     for files in file_names:
>         try:
>             lexi_file = open(str(sys.path[0]) + "/lexi/" + files, "r")
>             files_and_lines[filenumber] = lexi_file.readlines()
>             filenumber = filenumber + 1
> 
>         except(IOError):
>             print "Something went wrong trying to read the file:"
>             print "'" + str(sys.path[0]) + files + "'"
> 
> 
> 
> But that was not very sucksessfully. I am not even sure on how to define an empty 2D list. Thanks for all help.
> 
> ØØ




More information about the Python-list mailing list