Чтение файла в многомерный массив с помощью 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
ключевое слово при работе с файлом объекты. Это имеет то преимущество, что файл закрыт после его люкс заканчивается, даже если по пути возникает исключение. Это также намного короче, чем писать эквивалентные блоки 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)])