If I have a text file like this:
Hello World
How are you?
Bye World
How would I read it into a multidimensional array like this:
Adding to the accepted answer:
with open("textFile.txt") as textFile:
lines = [line.strip().split() for line in textFile]
This will remove '\n' if it is appended to the end of each line.
Also don't forget to use strip
to remove the \n
:
myArray = []
textFile = open("textFile.txt")
lines = textFile.readlines()
for line in lines:
myArray.append(line.split(" "))
You can use map with the unbound method str.split:
>>> map(str.split, open('testFile.txt'))
[['Hello', 'World'], ['How', 'are', 'you?'], ['Bye', 'World']]
In Python 3.x, you have to use list(map(str.split, ...))
to get a list because map in Python 3.x return an iterator instead of a list.
A good answer would be :
def read_text(path):
with open(path, 'r') as file:
line_array = file.read().splitlines()
cell_array = []
for line in line_array:
cell_array.append(line.split())
print(cell_array)
Which is optimized for readability.
But python syntax let's us use less code:
def read_text(path):
with open(path, 'r') as file:
line_array = file.read().splitlines()
cell_array = [line.split() for line in line_array]
print(cell_array)
And also python let's us do it only in one line!!
def read_text(path):
print([[item for item in line.split()] for line in open(path)])
Use a list comprehension and str.split
:
with open("textFile.txt") as textFile:
lines = [line.split() for line in textFile]
Demo:
>>> with open("textFile.txt") as textFile:
lines = [line.split() for line in textFile]
...
>>> lines
[['Hello', 'World'], ['How', 'are', 'you?'], ['Bye', 'World']]
with statement:
It is good practice to use the
with
keyword when dealing with file objects. This has the advantage that the file is properly closed after its suite finishes, even if an exception is raised on the way. It is also much shorter than writing equivalent try-finally blocks.