469,609 Members | 1,666 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,609 developers. It's quick & easy.

Reading files into a 2D list.

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.

ØØ
Jul 19 '05 #1
4 1679
Øyvind Østlund wrote:
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 + "'"


I'm not sure I understand you. Do you wish to end up with an array
like this:

#v+

[fileName0][fileLines0]
[fileName1][fileLines1]
...
[fileNameN][fileLinesN]

#v-

In that case try something like:

#v+
files_and_lines = []
for name in file_names:
files_and_lines.append([name, open(name, 'r').readlines()])
print 'Read %d files' % (len(files_and_lines),)


#v-

Add proper error checking.

At least, I think the [].append() method is what you're looking for.

Cheers,

--
Klaus Alexander Seistrup
Magnetic Ink, Copenhagen, Denmark
http://magnetic-ink.dk/
Jul 19 '05 #2
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.

ØØ

Jul 19 '05 #3
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.

ØØ


Jul 19 '05 #4
On Wed, 11 May 2005 11:39:20 +0200, "Oyvind Ostlund"
<Oy************@cern.ch> declaimed the following in comp.lang.python:

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.

A bit confusing but... UNTESTED -- I'm coding off the top of my
head.

theData = []

for i in len(file_names):
theData[i] = None #init placeholder/bad file
fid = os.path.join(sys.path[0], "lexi", filenames[i])
try:
fin = open(fid, "r")
theData[i] = fin.readlines()
fin.close()
except (IOError):
print "An error occurred opening/reading file: ", fid

-- ================================================== ============ <
wl*****@ix.netcom.com | Wulfraed Dennis Lee Bieber KD6MOG <
wu******@dm.net | Bestiaria Support Staff <
================================================== ============ <
Home Page: <http://www.dm.net/~wulfraed/> <
Overflow Page: <http://wlfraed.home.netcom.com/> <

Jul 19 '05 #5

This discussion thread is closed

Replies have been disabled for this discussion.

By using this site, you agree to our Privacy Policy and Terms of Use.