如何解决在python中以变量名存储目录中的文件
我有这个:
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()
['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,它包含 graph_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
我的方法做错了什么?
解决方法
files 是一个包含字符串的列表,而不是整数。因此,当您说 'for i in files' 时,您是在告诉它 'i' 是一个字符串。然后,当您尝试执行 file[i] 时,它会出错,因为您的 'i' 是一个字符串,而不是一个 int。因此,与其说“for i in files”,不如说“for i in range(files.size)”或类似的东西
,我从您的问题中了解到您有一个包含 n 个元素的列表。并且您想将每个元素分配给 n 个不同的变量。我不明白你为什么需要这个,但是:
- @wolfenstein11x 是对的。使用 for 循环,您将拥有每个元素。但是,假设您解决了这个问题。使用您编写的代码,您将把文件的每个元素分配给一个名为文件的列表。 (考虑到它至少有 n 个元素)
如果我的理解是正确的,并且您确实希望文件列表中的每个元素都有 n 个不同的变量(我仍然不知道您为什么需要它),您可以看看 exec。
回复后编辑:
您可以循环读取每个文件并对内容执行任何操作:
directory = os.path.join("/home","path")
for root,dirs,files in os.walk(directory):
for file in files:
with open(file,"r") as conetnt:
print(conetnt.read())
,
您可以使用内置函数 exec()
将字符串作为 Python 代码执行。如何执行此操作的示例:
file_number = 1 # A counter to keep track of the number of files you have found
directory = os.path.join("/home","path")
for root,files in os.walk(directory):
for file in files:
if file.endswith(".csv"):
exec("file" + str(file_number) + " = " + file)
file_number += 1
print(file1) # Example usage
我认为这就是您想要实现的目标。
,只需使用 enumerate(iterable,start)
函数:
for i,file_name in enumerate(files): # or optionally you can pass a start position which by default is set to 0 and we don't need to modify it in your case
file[i] = file_name
记得初始化一个单独的 file = []
列表,因为我看到你使用 file
作为循环变量,这样你就不能传递一个值和一个索引,这样程序可能会抛出错误。一定要了解 enumerate()
函数,它可以节省很多......快乐编码..:)
使用 for i in range(files.size)
而不是 for i in files
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。