2017-02-08 3 views
0

В Python, у меня есть файл, как это:Как читать файл в матричный символ по символу в python?

foo 
fo 
f 
foo 
foooo 

И я хочу, чтобы прочитать его в матрицу, как:

[['f', 'o', 'o', ' ', ' '], 
['f', 'o', ' ', ' ', ' '], 
['f', ' ', ' ', ' ', ' '], 
['f', 'o', 'o', ' ', ' '], 
['f', 'o', 'o', 'o', 'o']] 

Так что каждый отдельный список имеет ту же длину, а длина это длина самого длинного списка, заполняя пробелы, чтобы добраться до этой длины.

Вот мой код до сих пор:

with open('data.txt', 'r') as myfile: 
    data=myfile.read() 

for c in data: 
    ???? 
+2

Каков ваш код? :) – mmenschig

+0

Я еще не пробовал писать код, чтобы сделать это; Я не могу понять, с чего начать. –

+1

Вот подсказка: вам нужно знать длину самой длинной строки (из вашего файла). – synchronizer

ответ

2

Вы можете построить так,

text = open(file_name).read() 
lst = text.split('\n') 
print [list(i+' '*(len(max(lst))-len(i))) for i in lst] 

Получить maimum длиной исходной юдоль в lst и получить substarcted значения с текущей юдолью, и получить addup ' ' поля,

Результат

[['f', 'o', 'o', ' ', ' '], 
['f', 'o', ' ', ' ', ' '], 
['f', ' ', ' ', ' ', ' '], 
['f', 'o', 'o', ' ', ' '], 
['f', 'o', 'o', 'o', 'o']] 
+1

Это сработало для меня! Спасибо! –

0

Как вы знаете, первый шаг, чтобы найти максимальную строку длины:

with open("file.txt", 'r') as f: 
    lines = f.readlines() 
    max_len = max(map(len,lines)) 

После того как вы это, вы можете создать свой массив, путем заполнения строк с format() function, поэтому для каждого конкретного линия, которая может выглядеть

modified_line = "{:{max_len}}".format(original_line, max_len) 

Это будет площадка original_line в строке, которая max_len долго (левый край). Синтаксис функции format может быть немного сложным, поэтому я дал вам преимущество, но все остальное просто, и я оставлю вас.

0

Короткое решение с использованием max и str.ljust функции:

with open('data.txt', 'r') as myfile: 
    lines = myfile.readlines() 
    max_len = len(max(lines, key=len)) 
    result = [list(l.ljust(max_len, ' ')) for l in lines] 

print(result) 
Смежные вопросы