如何将文件从文件转换为Python中的列表?

时间:2014-11-01 23:48:42

标签: python list python-3.x

我目前正在为我的学校工作制作一个程序,向用户询问3组10个随机生成的问题,然后将学生的结果存储在三个文本文件中的一个中,具体取决于他们所在的课程。该程序应该能够加载文本文件中的所有数据,以便当下一个学生参加测验时,他们的结果会附加到其余部分。它存储在名为" class1"," class2"的列表中。或者" class3",取决于用户所在的类。然后可以以不同的方式对数据进行排序。在这篇文章中,我们假设用户属于1级。

该程序跟踪用户名称,最高分,平均分数以及他们在测验中的三次尝试以及将其存储到列表" class1"中。以下是列表" class1"。

[('Albert', 6, 2, [6, 0, 0]), ('Bob', 6, 2.33, [6, 1, 0]), ('Cameron', 5, 4, [5, 2, 5])].

如果程序以前从未运行过,那么程序将只创建一个名为" Class 1 Data.txt"的新文本文件。但是,如果此文件已存在,则以下代码段将运行:

f = open("C:/Users/Custom/Desktop/Class " + str(classNumber) + " Data.txt", "r")
lines = f.readlines()
oldData = lines[3]

变量" oldData"现在只是一个包含"的长字符串[(' Albert',6,2,[6,0,0])......"。现在我们假设该程序已关闭,然后由另一名叫Zara的学生加载,然后该学生参加测验。因为" oldData"只是一个字符串而不是列表,当我尝试将其追加到列表" class1"时,会发生这种情况:

[('Zara', 9, 6, [3, 9, 6]), "[('Albert', 6, 2, [6, 0, 0]), ('Bob', 6, 2.33, [6, 1, 0]), ('Cameron', 5, 4, [5, 2, 5])]\n"]

我如何尝试从文件加载文本然后将其存储为列表?我尝试过使用各种方法,但没有一种方法可行。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您似乎只是将数据的文本表示(在Python中)复制并粘贴到文本文件中,现在您想要获取该文本并将其(从文本)转换回Python数据结构体。我认为这是一种过于复杂的做法。解析器和解析中涉及的语法相当复杂,你很难重现它。另外,我认为这不是对你的时间的宝贵利用。

这给你两个选择:

  1. 如果您确实想将python类型序列化为磁盘,我强烈建议您尝试使用pickle库。这有点复杂,但是一旦掌握了它,你应该能够挑选和挑选完全任意复杂的对象,而不是试图用普通的旧文本解析它们。

  2. 如果你不这样做,你应该找到一种更好,更可预测,更容易解析的方法来将数据保存到文本中。

  3. 在程序本身中,您应该创建类以更轻松地封装数据 - 您有一个字符串和整数元组列表以及整数列表。在没有任何面向对象的结构的情况下走过一点点。

  4. 例如,如果您要使用与python类型的外观无关的其他文本表示:

    name:Zara highscore:9 averagescore:6 attempt1:3 attempt2:9 attempt3:6
    name:Albert highscore:6 averagescore:2 attempt1:6 attempt2:0 attempt3:0
    

    或者,如果您要使用XML,则可以将文档保存为:

    <users>
        <user name="yrName" highscore="yrScore" averagescore="yrAverage" 
              attempt1="1" attempt2="2" attempt3="3">       
        </user>
        <user>
            ...
    </users>
    

    您可以使用xml.etree.ElementTree遍历节点并挑选出您需要的每条信息。

    我想这个问题最大的问题并不在于你为什么以方式存储数据,而是为什么你要存储大量的数据呢?第一名。 40%的数据 - 所有高分和平均分数 - 完全没有理由存储。如果您可以访问这三个尝试,并且创建了这些数字,那么这些数字就可以轻松计算出来,而不仅仅是使用(一个+两个+三个)/ 3个或几个([一个,两个,三个])。