Python 如何读取包含测验问题和答案的文件,该文件保存为列表的字符串表示形式?
我正在用Python创建一个可以编辑的测验,但是其中一个部分需要将问题保存在一个文件中。在这段代码中,我尝试读取文件,然后将它读取的内容放入列表中,这样我就可以在某些按钮上显示某些问题。但我不断收到错误,说列表不可调用 我曾尝试使用Python 如何读取包含测验问题和答案的文件,该文件保存为列表的字符串表示形式?,python,tkinter,file-io,Python,Tkinter,File Io,我正在用Python创建一个可以编辑的测验,但是其中一个部分需要将问题保存在一个文件中。在这段代码中,我尝试读取文件,然后将它读取的内容放入列表中,这样我就可以在某些按钮上显示某些问题。但我不断收到错误,说列表不可调用 我曾尝试使用strip来删除出现的引号字符串,但出现了一个错误,即 “列表”对象没有属性“strip” 我对Python比较陌生,因此我正在努力寻找其他修复方法,我尝试将打印内容隔离在不同的行中,然后将其放入列表中,但结果表明列表无法再次调用 textquestions=open
strip
来删除出现的引号字符串,但出现了一个错误,即
“列表”对象没有属性“strip”
我对Python比较陌生,因此我正在努力寻找其他修复方法,我尝试将打印内容隔离在不同的行中,然后将其放入列表中,但结果表明列表无法再次调用
textquestions=open('listofquestions','r')
allthequestions = textquestions.readlines()
forbuttons=[print(allthequestions)]
textquestions.close
q1 = forbuttons(0)
buttonq1 = tk.Button(self, text=forbuttons[q1][0])
buttonq1.pack()
文件中只写了这一点,没有其他内容(首先填写问题以使其工作):
然而,当它们被打印出来时,它们似乎是这样打印的:
'["What would you wear to work?","Hoodie", "Suit", "Shorts","2"],["How would you greet a customer?","Hey", "Hi", "Hello", "0"],["How many years of experience do you have?","Loads", "None", "Some","1"],["Why do you want to work here?","It's fun", "No money", "Friend told me to","2"]'
What would you wear to work?,Hoodie, Suit, Shorts,2
How would you greet a customer?,Hey, Hi, Hello, 0
How many years of experience do you have?,Loads, None, Some,1
Why do you want to work here?,It's fun, No money, Friend told me to,2
我认为所有这些引语都阻止了列表的运行?虽然我不确定,但可能代码的其余部分也不正确。您需要解析从文本文件读取的字符串,以便Python以结构化方式查看其内容 一种非常简单的方法是添加
[
和]
,并将其视为一个结构:
import json
with open('listofquestions') as textquestions:
questions_json = '[' + textquestions.read() + ']'
allthequestions = json.loads(questions_json)
Python’也可以工作,但如果输入数据不可信(它将在其中执行任意代码),它会引入安全漏洞。您需要解析从文本文件读取的字符串,以便Python以结构化方式查看其内容 一种非常简单的方法是添加
[
和]
,并将其视为一个结构:
import json
with open('listofquestions') as textquestions:
questions_json = '[' + textquestions.read() + ']'
allthequestions = json.loads(questions_json)
Python’也可以工作,但如果输入数据不可信,它可能会引入安全漏洞(它将在其中执行任意代码)。错误
“列表”对象没有属性“strip”
出现,因为-如错误所述-您试图对类型为list
的对象调用方法strip
。我想你是想在列表中的字符串上调用strip
。无论如何,strip
对你的问题没有帮助,我认为
一般来说:您可能应该更改保存问题数据的方式
但是,尽管如此,您仍然可以使用以下内容加载数据:
import yaml
with open('listofquestions') as f:
data = f.read()
questions = yaml.safe_load('[{}]'.format(data))
发生的情况是,您的文件的内容可以解释为部分YAML文件-唯一缺少的是一个左括号[
和一个右括号]
。我们可以在读取文件后将这些内容添加到内容中,然后将其解析为YAML内容
改进:
- 将
与
一起使用以读取文件:
- 使用
yaml
模块解析文件内容:
第一个问题在问题[0][0]
中,三个答案在问题[0][1]
,问题[0][2]
和问题[0][3]
中,正确答案在问题[0][4]
中
您可以访问这些值来构建GUI,如下所示:
错误
“列表”对象没有属性“strip”
出现,因为-如错误所述-您试图对类型为list
的对象调用方法strip
。我想你是想在列表中的字符串上调用strip
。无论如何,strip
对你的问题没有帮助,我认为
一般来说:您可能应该更改保存问题数据的方式
但是,尽管如此,您仍然可以使用以下内容加载数据:
import yaml
with open('listofquestions') as f:
data = f.read()
questions = yaml.safe_load('[{}]'.format(data))
发生的情况是,您的文件的内容可以解释为部分YAML文件-唯一缺少的是一个左括号[
和一个右括号]
。我们可以在读取文件后将这些内容添加到内容中,然后将其解析为YAML内容
改进:
- 将
与
一起使用以读取文件:
- 使用
yaml
模块解析文件内容:
第一个问题在问题[0][0]
中,三个答案在问题[0][1]
,问题[0][2]
和问题[0][3]
中,正确答案在问题[0][4]
中
您可以访问这些值来构建GUI,如下所示:
您的方法有几个问题,一些编码错误,一些概念错误
这个概念的问题是:
正如我所观察到的,主要的问题是,您似乎认为将一些文本放入一个文件中,该文件是一个逗号分隔的方括号内逗号分隔的双引号文本元素序列,当使用文件句柄和readlines()
进行读取时,将在Python程序中创建一个列表
此外,当您抱怨打印的单引号括起来的字符串时,似乎希望从文件中读取的内容打印为单独的方括号括起来的元素(可能每一个都在一行?),而不是单个字符串
首先,从文件中读取的文本不是Python列表。
Python源代码仅被解释为源代码,其中包含数字、列表、元组等语句和数据,因为它们是由Python解释器读取的
当您open()
一个文件,然后在文件句柄上调用readlines()
时,读取该文件的不是Python解释器。实际上,在较低的级别上,是内核以适当大小的块读取文件并将其放入内存,即变量所指的所有问题的内存块中。
想想看:如果第一个理论是正确的,那么对文件使用readlines()
实际上会执行任何看起来像Python命令的操作。
那么,它怎么会知道该返回什么呢?r
# read_questions.py
import pickle
questions_file = open("questions.dmp")
all_the_questions = pickle.load(questions_file)
print(all_the_questions[0])
print(all_the_questions[1])
['What would you wear to work?', 'Hoodie', 'Suit', 'Shorts', '2']
['How would you greet a customer?', 'Hey', 'Hi', 'Hello', '0']
What would you wear to work?,Hoodie, Suit, Shorts,2
How would you greet a customer?,Hey, Hi, Hello, 0
How many years of experience do you have?,Loads, None, Some,1
Why do you want to work here?,It's fun, No money, Friend told me to,2
{ "What would you wear to work?" : ["Hoodie", "Suit", "Shorts","2"] }