我有这个:
directory = os.path.join("/home","path")
for root,dirs,files in os.walk(directory):
for file in files:
if file.endswith(".csv"):
f=open(file)
f.close()
“文件”包含大约300个csv文件,如:
['graph_2020-08-04_2020-08-17.csv',
'graph_2020-04-11_2020-04-24.csv',
'graph_2021-02-05_2021-02-18.csv',
...]
我基本上想为每个文件添加一个名称,这样我就有了file1,file2,file3。。。为了他们所有人。因此,如果我调用file1,它包含图形_2020-08-04_2020-08-17.csv。这就是我所拥有的:
for i in files:
file[i] = files[i]
但它又回来了
TypeError: list indices must be integers or slices, not str
在我的方法中,我做错了什么?
5条答案
按热度按时间bqujaahr1#
您可以使用内置函数
exec()
以python代码的形式执行字符串。如何执行此操作的示例:我想这就是你想要实现的。
ffx8fchx2#
随你的便
enumerate(iterable,start)
功能:请记住初始化一个单独的
file = []
列出我看到的您正在使用的file
作为循环变量,这样就不能传递值和索引,这样程序可能会抛出错误。一定要了解enumerate()
功能它节省了很多…快乐编码:)bnl4lu3b3#
我从你的问题中了解到的是,你有一个包含n个元素的列表。您希望将每个元素分配给n个不同的变量。我不明白你为什么需要这个,但是:
@沃尔芬斯坦是对的。有了这个for循环,您将拥有每个元素。然而,假设你解决了这个问题。使用您编写的代码,您将文件的每个元素分配给名为file的列表(考虑到它至少有n个元素)
如果我的理解是正确的,并且您确实希望文件列表中的每个元素都有一个不同的变量(我仍然不知道您为什么需要它),那么您可以查看exec。
回复后编辑:
您可以在循环中读取每个文件,并对内容执行任何操作:
tkclm6bt4#
使用
for i in range(files.size)
而不是for i in files
.rsaldnfx5#
文件是一个包含字符串的列表,而不是整数。所以当你说‘文件中的i’时,你是在告诉它‘i’是一个字符串。然后,当您尝试执行file[i]时,它会给出一个错误,因为“i”是一个字符串,而不是int。因此,您可以说“for i in files”,而不是“for i in range(files.size)”或类似的内容