2017-02-08 1 views
0

,이 같은 파일이 있습니다파이썬에서 문자로 행렬 문자로 파일을 읽는 방법? 파이썬에서

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] 

lst에서 maimum의 lenth 베일을 얻고 현재 골짜기와 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와 문자열을 패딩하여 배열을 만들 수를 각각의 특정에 대한 그래서 긴 max_len 인 문자열 내에서

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

이 의지 패드 original_line처럼 보일 수 있습니다 선 (왼쪽 정렬). format 함수의 구문은 다소 까다로울 수 있으므로 필자는 그것에 대해 머리를 짚었지만 나머지는 간단하고 나는 당신에게 달려있다.

0
maxstr.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) 
관련 문제