Чтение файла в многомерный массив с помощью Python

если у меня есть текстовый файл, как это:

Hello World
How are you?
Bye World

как бы я читал его в многомерный массив, как это:

[["Hello", "World"],
 ["How", "are", "you?"],
 ["Bye" "World"]]

Я пробовал:

textFile = open("textFile.txt")
lines = textFile.readlines()
for line in lines:
    line = lines.split(" ")

но он просто возвращается:

["Hello Worldn", "How are you?n", "Bye World"]

как прочитать файл в многомерный массив?

5 ответов


используйте понимание списка и str.split:

with open("textFile.txt") as textFile:
    lines = [line.split() for line in textFile]

демо:

>>> with open("textFile.txt") as textFile:
        lines = [line.split() for line in textFile]
...     
>>> lines
[['Hello', 'World'], ['How', 'are', 'you?'], ['Bye', 'World']]

with сообщении:

Это хорошая практика, чтобы использовать with ключевое слово при работе с файлом объекты. Это имеет то преимущество, что файл закрыт после его люкс заканчивается, даже если по пути возникает исключение. Это также намного короче, чем писать эквивалентные блоки try-finally.


можно использовать map С несвязанный метод str.split:

>>> map(str.split, open('testFile.txt'))
[['Hello', 'World'], ['How', 'are', 'you?'], ['Bye', 'World']]

В Python 3.X, вы должны использовать list(map(str.split, ...)) чтобы получить список, потому что map в Python 3.х возвращают итератор, а не список.


также не забудьте использовать strip удалить \n:

myArray = []
textFile = open("textFile.txt")
lines = textFile.readlines()
for line in lines:
    myArray.append(line.split(" "))

добавление к принятому ответу:

with open("textFile.txt") as textFile:
    lines = [line.strip().split() for line in textFile]

это удалит '\n', если он будет добавлен в конец каждой строки.


хорошим ответом было бы:

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)

который оптимизирован для чтения.

но синтаксис python давайте использовать меньше кода:

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)

а также python давайте сделаем это только в одной строке!!

def read_text(path):
    print([[item for item in line.split()] for line in open(path)])