我有一个名为projects.txt
的文件,其中包含以下代码行:
['Apollo', 'Astro', 'Aurora', 'Barcelona']
我使用以下Python2代码加载文件并尝试打印随机选择,但我总是从列表中只获得一个字符:
import random
projNames = open('projects.txt').read()
print(random.choice(projNames))
示例结果: a
但是,如果我将文本文件的内容直接复制到代码中,它对我来说是正常的。
import random
projNames = ['Apollo', 'Astro', 'Aurora', 'Barcelona']
print(random.choice(projNames))
示例结果: Apollo
我需要它能够直接加载文件的内容,而不是编辑.py
文件中的代码。
我在原始代码中忽略了什么?我专门使用Python 2.7.x (最新版本)。
答案 0 :(得分:2)
你必须首先解析\ eval字符串才能成为Python列表:
import ast
import random
projNames = ast.literal_eval(open('projects.txt').read())
print(random.choice(projNames))
答案 1 :(得分:1)
这是因为read
方法会将您的文件读取为一个大字符串而不是list
。您将需要解析read
命令的输出(逗号对split
可能适合您):
>>> my_string.split()
['Apollo', 'Astro', 'Aurora', 'Barcelona']
答案 2 :(得分:1)
将单引号char替换为双引号后,可以使用json.loads
。代码将是这样的:
import random
import json
line = open('projects.txt').read().replace("'", '"') # Format JSON
projNames = json.loads(line) # Load list
print(random.choice(projNames))