首页 > 解决方案 > 为什么我在从文本文件导入列表的字符串中得到 \\n?

问题描述

我有一个文本文件,其中包含我想在尝试用 Python 编写的测验中被问到的问题。我希望这些问题如下所示:

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

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

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

这些字符串存储在一个文本文件中,以便我可以更改它们或添加到它们

然后,我使用以下代码将这些字符串导入 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\\n\n', '2. What is the square root of 121?\\n(a) Nine\\n(b) Ten\\n(c) Eleven\\n\\n\n', '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\\n\n', '4. What is 347 minus 298?\\n(a) 59\\n(b) 49\\n(c) 69\\n\\n\n', '5. What is 22 x 11?\\n(a) 231\\n(b) 131\\n(c) 341\\n\\n\n']

即在导入过程中添加了额外的 \ 字符,这意味着当我在测验中使用这些字符串时,我会看到所有应该格式化问题的 \n 代码。我只想完全按照它们在文本文件中的样子导入字符串,而没有 \n 的“处理”导致

"\\n"

(两个反斜杠 ns)

标签: python

解决方案


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


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

我认为这里最好的解决方案是中间立场:结构化数据* 如 JSON 或 CSV。以下是如何在 JSON 中执行此操作:

问题.json

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

临时文件

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 1\n(b) Option 2\n(c) Option 3\n\n']

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


推荐阅读