为什么我在从文本文件导入列表的字符串中得到\n ?



我有一个文本文件,其中包含我想在我试图用Python编码的测验中被问到的问题。我希望这些问题以如下方式出现:

Multiple choice question?
(a) Option 1
(b) Option 2
(c) Option 3

因此,问题字符串写成如下:

"1. Multiple choice question?n(a) Option 1a(b) Option 2n(c) Option 3nn"

这些字符串存储在文本文件中,因此我可以更改它们或添加它们

然后使用以下代码将这些字符串导入Python中的列表:

with open("questions.txt") as file_in:
questions = []
for question in file_in:
questions.append(question)    

然而,当我接着:

print(questions)

我:

['1. What is seven squared?\n(a) 47\n(b) 49\n(c) 59\n\nn', '2. What is the square root of 121?\n(a) Nine\n(b) Ten\n(c) Eleven\n\nn', '3. If a cube has a volume of 1000 cm^2, how long is each side?\n(a) 6cm \n(b) 8cm\n(c) 10cm\n\nn', '4. What is 347 minus 298?\n(a) 59\n(b) 49\n(c) 69\n\nn', '5. What is 22 x 11?\n(a) 231\n(b) 131\n(c) 341\n\nn']

。在导入过程中添加了额外的字符,这意味着当我在测试中使用这些字符串时,我看到的是应该格式化问题的所有n代码。我只是想导入字符串,就像它们在文本文件中一样,没有n的"处理"导致

"\n"

(两个反斜杠ns)

首先,阅读为什么反斜杠出现两次?简而言之,Python使用反斜杠来开始转义序列,因此'n'代表换行符,'\'代表反斜杠本身。


现在,我认为这里的主要问题是概念性的。读取文件与导入文件不同。读取意味着将其视为文本,而导入意味着将其视为代码.

我认为最好的解决方案是一个中间地带:结构化数据*如JSON或CSV。下面是如何在JSON中做到这一点:

questions.json

[
"1. Multiple choice question?n(a) Option 1n(b) Option 2n(c) Option 3nn"
]

tmp.py

import json
with open('questions.json') as f:
questions = json.load(f)  # Parse JSON into data
print(questions)

['1. Multiple choice question?n(a) Option 1n(b) Option 2n(c) Option 3nn']

*我不确定这是正确的术语