我的名为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]]]
我希望每行输入都在自己的子列表中。
答案 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']]