在python中读取另一个文件的列表

时间:2018-05-02 23:48:38

标签: python parsing

我的名为test.txt的文本文件如下所示。

[['A', 3.992303979497981], ['V', 2.2251878737397264], ['V', 2.703754348429766], ['A', 3.900215472550781], ['A', 4.99003388996634]
[['C', 3.5329528530441805], ['A', 1.1530906322097374], ['A', 2.666421771048816], ['V', 1.2859199105217558], ['B', 0.40879871489389696]

从另一个文件code.py中,如何将每行读作仅包含值的列表? 意思是我想在像

这样的mylist中获取值
mylist = [[[A],[V],[V],[A],[A]],
          [[C],[A],[A],[V],[B]]]

我尝试过以下但是没有用。

import ast
with open('test.txt', 'r') as fp:
    mylisttrain = [ast.literal_eval(line) for line in fp]

price=[]
for x in range(0,2):
    for y in range(0,10):
        price.append([mylisttrain[x][y][0]])

它提供类似

的输出
[[A],[V],[V],[A],[A],
 [C],[A],[A],[V],[B]]

但是,我想要这样的输出。

[[[A],[V],[V],[A],[A]],
 [[C],[A],[A],[V],[B]]]

我希望每行输入都在自己的子列表中。

1 个答案:

答案 0 :(得分:2)

您可以使用嵌套列表推导来保留输入的结构:

import ast
new_s = [ast.literal_eval(line.strip('\n')+']') for line in open('filename.txt')]
final_data = [[[a] for a, _ in i] for i in new_s]

输出

[[['A'], ['V'], ['V'], ['A'], ['A']], [['C'], ['A'], ['A'], ['V'], ['B']]]

但是,您可以在内部for循环之前创建临时列表,而不是列表解析,以存储抓取第一个字符的结果:

price=[]
for i in mylisttrain:
   temp = []
   for a, _ in i:
     temp.append([a])
   price.append(temp)

编辑:要删除括号,您可以使用其他解包:

a, b = price
print(a)
print(b)

输出:

[['A'], ['V'], ['V'], ['A'], ['A']]
[['C'], ['A'], ['A'], ['V'], ['B']]