要列出表单的文本文件?

时间:2018-04-15 04:40:45

标签: python-3.x list

我想将文本文件读入列表形式,但要提取文本文件中每个字符的位置,以形成数字/定量列表。

一个文本文件的示例(在数字被'\ t'分割后):

   3         ---
   2        /   \
   1       /     \
   0    ---       \   
  -1               \

最终输出如下:     [0,0,0,1,2,3,3,3,2,1,0,-1]

目前我有:

    with open("file.txt", "r") as text:
        split_list = []
    for x in text:
        y = list(x.split("\t"))
        split_list.append(y)

    list_numbers = []
    for a in range(len(split_list)):
        for line in split_list:
            if line[1][a] != " ":
                indexes.append(line[0])
    print(indexes)

给出输出:['0','0','0','1','2','3','3']

我怀疑我对范围(len(split_list))做错了,因为我的输出正确读取了前7个字符,但我不知道是什么。

1 个答案:

答案 0 :(得分:0)

你使用split_list的长度(图表的高度)作为每一行的长度(图表的宽度)你应该真正颠倒嵌套循环的顺序,这样你就可以告诉行中字符串的长度:

indexes = []
with open("file.txt", "r") as text:
    split_list = []
    for x in text:
        y = list(x.split("\t"))
        split_list.append(y)

list_numbers = []
for line in split_list:
    for ch in line[1]:
       if ch != " ":
           indexes.append(line[0])
print(indexes)

但是你的列表不会按你想要的顺序排列,但是可以通过记住位置(用enumerate())然后按位置排序来修复,为了方便,我将它压缩为1循环:

unordered_indexes = []
with open("file.txt", "r") as text:
    for line in text:
        val,data = line.split("\t")
        for pos,ch in enumerate(data):
            if ch != " " and ch != "\n":
                unordered_indexes.append((val,pos))
unordered_indexes.sort(key=lambda x: x[1])
indexes = [i[0] for i in unordered_indexes]
print indexes