如何在python中逐个字符地读取文件?

时间:2017-02-08 19:17:35

标签: python matrix character

在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:
    ????

3 个答案:

答案 0 :(得分:2)

你可以像这样构建,

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

获取lst中的最小值,并获取当前值的替代值,并获取加号' '字段,

<强>结果

[['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_lenformat函数的语法可能有点棘手,所以我给你一个良好的开端,但其余的很简单,我会留给你。

答案 2 :(得分: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)