user7250011
user7250011

Reputation: 3

Breaking txt file into list of lists by character and by row

I am just learning to code and am trying to take an input txt file and break into a list (by row) where each row's characters are elements of that list. For example if the file is:

abcde
fghij
klmno

I would like to create

[['a','b','c','d','e'], ['f','g','h','i','j'],['k','l','m','n','o']]

I have tried this, but the results aren't what I am looking for.

file = open('alpha.txt', 'r')
lst = []
for line in file:
    lst.append(line.rstrip().split(','))
print(lst)
[['abcde', 'fghij', 'klmno']]

I also tried this, which is closer, but I don't know how to combine the two codes:

file = open('alpha.txt', 'r')
lst = []
for line in file:
    for c in line:
        lst.append(c)
print(lst)
['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o']

I tried to add the rstrip into the lst.append but it didn't work (or I didn't do it properly). Sorry - complete newbie here!

I should mention that I don't want newline characters included. Any help is much appreciated!

Upvotes: 0

Views: 990

Answers (4)

Maltysen
Maltysen

Reputation: 1946

This is very simple. You have to use the list() constructor to make a string into its respective characters.

with open('alpha.txt', 'r') as file:
    print([list(line)[:-1] for line in file.readlines()])

(The with open construct is just an idiom, so you don't have to do all the handling with the file like closing it, which you forgot to do)

Upvotes: 1

Paul Rooney
Paul Rooney

Reputation: 21609

use a nested list comprehension. The outer loop iterates over the lines in the file and the inner loop over the characters in the strings of each line.

with open('alpha.txt') as f:
    out = [[char for char in line.strip()] for line in f]

req = [['a','b','c','d','e'], ['f','g','h','i','j'],['k','l','m','n','o']]

print(out == req)

prints

True

Upvotes: 0

Erik Godard
Erik Godard

Reputation: 6030

You are appending each entry to your original list. You want to create a new list for each line in your input, append to that list, and then append that list to your master list. For example,

file = open('alpha.txt', 'r')
lst = []
for line in file:
    newLst = []
    for c in line:
        newLst.append(c)
    lst.append(newLst)
print(lst)

Upvotes: 0

Dekel
Dekel

Reputation: 62536

If you want to split a string to it's charts you can just use list(s) (where s = 'asdf'):

file = open('alpha.txt', 'r')
lst = []
for line in file:
    lst.append(list(line.strip()))

print(lst)

Upvotes: 0

Related Questions