从文本文件创建列表
Creating lists from text file
我想创建列表,但在名为 "mydog.txt".
的外部文件中有 列表名称
mydog.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
该子例程应该取一个名称(假设为 "bingo"),然后将其转换为一个列表,并在该列表中包含 "test"
。
我应该拥有的最终变量是 "bingo = ["test"], bango = ["test"], smelly = ["test"], wongo = ["test"]
最后应该打印的是['test']
但是列表不存在。
为什么在子程序createlist
内部打印出来的是一个列表,而在子程序之外却没有?
file = open("mydog.txt")
my_list =file.read().splitlines() # will create the list from the file which should contain only names without '\n'
file.close()
或with
块不用担心文件关闭
with open("mydog.txt") as file:
my_list =file.read().splitlines() # will create the list from the file which should contain only names without '\n'
如果您想创建以文本文件中存在的名称命名的列表,您确实应该创建一个 dict
,其中键作为名称,值作为包含字符串的列表 test
my_dict={i:['test'] for i in my_list}
然后尝试打印
print(my_dict['bingo']) # will print list ['test']
打印整个字典
print(my_dict)
输出:
{'bango': ['test'], 'bingo': ['test'], 'smelly': ['test'], 'wongo': ['test']}
- 您正在向函数的本地命名空间添加变量。您添加的任何内容都不会在函数外部可见。
- 您正在赋值给一个由
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']
您可以使用 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']
我想创建列表,但在名为 "mydog.txt".
的外部文件中有 列表名称mydog.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
该子例程应该取一个名称(假设为 "bingo"),然后将其转换为一个列表,并在该列表中包含 "test"
。
我应该拥有的最终变量是 "bingo = ["test"], bango = ["test"], smelly = ["test"], wongo = ["test"]
最后应该打印的是['test']
但是列表不存在。
为什么在子程序createlist
内部打印出来的是一个列表,而在子程序之外却没有?
file = open("mydog.txt")
my_list =file.read().splitlines() # will create the list from the file which should contain only names without '\n'
file.close()
或with
块不用担心文件关闭
with open("mydog.txt") as file:
my_list =file.read().splitlines() # will create the list from the file which should contain only names without '\n'
如果您想创建以文本文件中存在的名称命名的列表,您确实应该创建一个 dict
,其中键作为名称,值作为包含字符串的列表 test
my_dict={i:['test'] for i in my_list}
然后尝试打印
print(my_dict['bingo']) # will print list ['test']
打印整个字典
print(my_dict)
输出:
{'bango': ['test'], 'bingo': ['test'], 'smelly': ['test'], 'wongo': ['test']}
- 您正在向函数的本地命名空间添加变量。您添加的任何内容都不会在函数外部可见。
- 您正在赋值给一个由
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']
您可以使用 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']