从文本文件创建列表

我想创建列表,但在名为“mydog.txt”的外部文件中有列表的名称。


我的狗.txt:


bingo

bango

smelly

wongo

这是我将文本转换为列表元素的代码。我认为它有效,但由于某种原因,完成后不会保存这些值:


def createlist(nameoflist):

    nameoflist = ["test"]

    print(nameoflist)


file = open("mydog.txt")

for i in file.readlines():

    i= i.replace("\n", "")

    print(i) #making sure text is ready to be created into a list name

    createlist(i)

file.close()

print("FOR fuction complete")


print(bingo) # I try to print this but it does not exist, yet it has been printed in the function

子程序应该取一个名字(比如“宾果游戏”),然后把它变成一个列表并包含"test"在该列表中。


我应该拥有的最终变量是“bingo = [“test”],bango = [“test”],臭味= [“test”],wongo = [“test”]


应该打印的最后一件事是['test']但列表不存在。


为什么它在子程序内部createlist而不是在子程序外部时打印为列表?


子衿沉夜
浏览 102回答 3
3回答

偶然的你

您可以使用exec:with open('mydog.txt') as f:    list_names = [line.strip() for line in f]for name in list_names:    exec('{} = ["test"]'.format(name))local = locals()for name in list_names:    print ('list_name:', name, ', value:', local[name])或者print (bingo, bango, smelly, wongo)输出:list_name: bingo , value: ['test']list_name: bango , value: ['test']list_name: smelly , value: ['test']list_name: wongo , value: ['test']or ['test'] ['test'] ['test'] ['test']

千巷猫影

您正在向函数的本地命名空间添加变量。您添加的任何内容都不会在函数之外可见。您所做的赋值是给一个名为 by 的变量nameoflist,而不是它所指的字符串。为了解决这个问题,你必须分配给模块命名空间。这其实并不难:def createlist(nameoflist):    globals()[nameoflist] = ["test"]你必须问自己的问题是你为什么要这样做。假设您加载文件:with open("mydog.txt") as f:    for line in f:        createlist(line.strip())现在你确实可以做到>>> print(bingo)['test']但是,使用文件的全部意义在于具有动态名称。你不知道你会得到什么名字,一旦你把它们放到全局命名空间中,你就不会知道哪些变量来自文件,哪些来自其他地方。请记住,全局命名空间只是一个花哨但常规的字典。我的建议是将变量保存在你自己的字典中,只是为了这个目的:with open("mydog.txt") as f:    mylists = {line.strip(): ['test'] for line in f}现在您可以按名称访问项目:>>> mylists['bingo']['test']但更重要的是,您可以检查获得的名称并以有意义的方式实际操作它们:>>> list(mylists.keys())['bingo', 'bango', 'smelly', 'wongo']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python