繁体   English   中英

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

[英]How to convert text from a file into a list in Python?

我目前正在为学校作业编写一个程序,该程序向用户询问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"]

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

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

这给您两个选择:

  1. 如果您实际上要将Python类型序列化为磁盘,则强烈建议尝试使用pickle库。 这有点复杂,但是一旦掌握了窍门,您就应该能够腌制和腌制完全任意复杂的对象,而不是尝试从普通的旧文本中解析它们。

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

  3. 在程序本身中,您应该创建类以更轻松地封装数据-您有一个字符串和整数元组列表以及一个整数列表。 缺少任何面向对象的结构都需要花很多时间。

例如,如果要使用不依赖于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或min([一个,两个,三个])要多得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM