我有一个输入路径/目录到文件夹和文件名的方法。我需要从文件夹中的指定文件名检索数据并创建一个LIST of DICTIONARIES
。
示例文件的PART如下:
VLSEGEWQLVLHVWAKVEADVAGHGQDILIRLFKSHPETLEKFDRFKHLKTEAEMKASEDLKK
1 137 0 8 7.887
10 127 0 8 7.388
10 130 0 8 5.087
11 131 0 8 5.400
10 134 0 8 4.770
每个文件的第一行都应忽略。然后,每行的前两个数字将是分配给键值“ pairs”的值,0
和8
被忽略,最后一个数字是分配给“ distance”的值
这是对文件中的每一行进行的操作,每一行都是新的字典。
因此输出应类似于
output = [
{"pairs": (1,137), "distance": 7.887},
{"pairs": (10,127), "distance": 7.388},
{"pairs": (10,130), "distance": 5.087},
{"pairs": (11,131), "distance": 5.400},
{"pairs": (10,134), "distance": 4.770},
]
我不确定如何解决此问题,是否读取文件以及文件的每一行。到目前为止,我所掌握的基本知识。我尚未实现创建字典列表的操作。我尝试从基本开始,读取每一行并复制数据,但输出为空列表。 请注意,此段代码是错误的,仅是我尝试过的。
def get_rr(self, file_name, path):
my_lst = []
#takes every file in folder and put in files list
for f in os.listdir(path):
#splits the file name into file name and its extension
with open(os.path.join(path,f)) as file_object:
line = file_object.readline()
while 1:
line = file_object.readline().rstrip()
if line == "":
break
my_lst.append(line)
return my_lst
我的问题:如何编程以使输出看起来像下面这样:
output = [
{"pairs": (1,137), "distance": 7.887},
{"pairs": (10,127), "distance": 7.388},
{"pairs": (10,130), "distance": 5.087},
{"pairs": (11,131), "distance": 5.400},
{"pairs": (10,134), "distance": 4.770},
]
答案 0 :(得分:1)
理解非常方便。另外,您可能不需要区分文件路径和名称,操作系统将为您处理。考虑到这一点,这样的事情应该起作用
def get_ss(self, path):
with open(path) as file:
lines = list(file)[2:]
return [{"pairs":tuple(map(int, words[:2])), "distance":float(words[-1])} for words in (line[:-1].split() for line in lines if line.strip())]