【问题标题】:Creating a variable named from file in python在python中创建一个从文件命名的变量
【发布时间】:2018-02-10 00:37:58
【问题描述】:

我有几百个 .txt 文件需要加载,而不是为每个文件输入变量,我想要一个自动化过程,为每个 .txt 文件创建一个变量,例如

Test.txt, Test1.txt and Test2.txt 给变量Test, Test1, Test2

我随后会将每个 .txt 文件加载到相应的变量中,例如

Test = glob.glob('Test.txt')
Test1 = glob.glob('Test1.txt')
Test2 = glob.glob('Test2.txt')

我可以创建一个包含所有文件名和“.txt”主题条的列表,例如['Test', 'Test1', 'Test2'] 但我不确定如何(或者即使可能)将此列表中的项目转换为变量。

我尝试阅读并发现global()exec() 可能有用,但我从未使用过它们,并且看到很多人警告说不要使用它们,因此热衷于获得更有经验的输入。

提前致谢

【问题讨论】:

  • 只需使用文件列表或字典。不需要动态命名的变量。
  • 假设你有你描述的能力。那你会怎么做?您将无法再编写任何代码,因为您不知道您拥有哪些变量名或其中的任何内容。你想在这里做什么?
  • 既然你已经知道文件名,为什么还要寻找文件名?

标签: python variables file-io global


【解决方案1】:

为什么要这样命名变量?

相反,您应该创建一个字典,使用列表的元素作为键。像这样的:

keys = ['Test', 'Test1', 'Test2']
dict.fromkeys(keys, 0)

这段代码会给你这个字典:

{'Test': 0, 'Test1': 0, 'Test2': 0}

【讨论】:

  • 注意第二个参数是否可变:d = dict.fromkeys(keys, []); d['Test'].append('foo'); print(d)
【解决方案2】:

不要从字符串创建变量名。事实上,理解 all* 变量是某个命名空间的 actually dictionary keys themselves 是很有启发性的。

根据您的情况,您可以设置类似于以下的字典:

d = {'Test'+str(i): glob.glob('Test'+str(i)+'.txt') for i in range(3)}

* 但请参阅@juanpa.arrivillaga 的评论。

【讨论】:

  • Nitpick:并不是所有的命名空间都被实现为实际的字典。本地命名空间针对简单数组进行了优化,其中字节码已经将本地名称编译到 thsi 数组中的位置,从而允许 LOAD_FASTSTORE_FAST 操作发挥它们的魔力。使用全局变量,您必须实际检查字典,因此,这就是为什么 glbal 名称解析比本地名称解析慢的原因(以及为什么 Python 不再允许对 locals 进行动态修改)
【解决方案3】:

感谢您的回复,根据此处和一位训练有素的物理学家朋友的建议,没有意识到字典如此强大:

files = {f.replace(".txt", ""): open(f, "r").read() for f in glob.glob('*.txt')}

然后我可以通过以下方式访问数据并随心所欲地处理数据:

files['filename']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    相关资源
    最近更新 更多