为了账号安全,请及时绑定邮箱和手机立即绑定

从文本文件创建列表

从文本文件创建列表

子衿沉夜 2021-07-01 18:25:08
我想创建列表,但在名为“mydog.txt”的外部文件中有列表的名称。我的狗.txt:bingobangosmellywongo这是我将文本转换为列表元素的代码。我认为它有效,但由于某种原因,完成后不会保存这些值: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而不是在子程序外部时打印为列表?
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超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']


查看完整回答
反对 回复 2021-07-06
?
千巷猫影

TA贡献1829条经验 获得超7个赞

您正在向函数的本地命名空间添加变量。您添加的任何内容都不会在函数之外可见。

您所做的赋值是给一个名为 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']


查看完整回答
反对 回复 2021-07-06
  • 3 回答
  • 0 关注
  • 101 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信