如何将文件的每一行读取到单独的列表以单独处理它们

时间:2016-06-02 23:31:06

标签: python list file

对于类似的主题已经存在几个问题,但它们都没有解决我的问题。

我已经为文本文件写了多个列表。在那里,每一行代表一个清单。看起来像这样:

1: ['4bf58dd8d48988d1ce941735', '4bf58dd8d48988d157941735', '4bf58dd8d48988d1f1931735', etc.]
2: ['4bf58dd8d48988d16a941735', '4bf58dd8d48988d1f6941735', '4bf58dd8d48988d143941735', etc.]
...

我创建了它:

with open('user_interest.txt', 'w') as f:
for x in range(1, 1084):
    temp = df.get_group(x)
    temp_list = temp['CategoryID'].tolist()

    f.write(str(temp_list) + "\n")

如果我读取文件,我会将整个文件作为列表。如果我然后访问行,我将它们作为类字符串!但我想把它们再次作为一个列表,就像我存储它们之前一样。

with open('user_interest.txt', 'r') as file:
for line in file:
    #temp_list.append(line)
    print(similarity_score(user_1_list, temp_list))

这里的行是类字符串,不是我想要的列表。使用temp_list的想法也不起作用。 (user_1_list是固定值,而temp_list不是)

以下是问题的上下文:我希望在我的similarity_score函数中处理每一行。我不需要“永远”的列表只需将其交给我的函数。此功能应适用于每一行。 该函数计算余弦相似度,我必须找到给定用户的前10个最相似的用户。所以我必须将每个其他用户与我的给定用户(user_1_list)进行比较。

Psedo代码:

read line
convert line to a list
give list to my function
read next line ...

可能这只是一个简单的修复,但我还没有得到它。我不希望每行都集成到新列表/嵌套列表中

[['foo', 'bar', ...]]

我也不希望他们都在一个列表中。

感谢您的帮助,并询问您是否需要更多信息!

2 个答案:

答案 0 :(得分:0)

您应该使用适当的序列化程序(如JSON)来编写列表。然后,您可以使用它来反序列化它们:

import json

# when writing the lists
f.write(json.dumps(temp_list) + "\n")

# when reading
lst = json.loads(line)

答案 1 :(得分:0)

  1. 使用PickleJSON序列化/反序列化您的数据
  2. 如果你绝对需要按照自己的方式行事,可以ast.literal_eval使用here