在python中以变量名存储目录中的文件

atmip9wb  于 2021-08-25  发布在  Java
关注(0)|答案(5)|浏览(429)

我有这个:

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

在我的方法中,我做错了什么?

bqujaahr

bqujaahr1#

您可以使用内置函数 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, dirs, 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

我想这就是你想要实现的。

ffx8fchx

ffx8fchx2#

随你的便 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() 功能它节省了很多…快乐编码:)

bnl4lu3b

bnl4lu3b3#

我从你的问题中了解到的是,你有一个包含n个元素的列表。您希望将每个元素分配给n个不同的变量。我不明白你为什么需要这个,但是:
@沃尔芬斯坦是对的。有了这个for循环,您将拥有每个元素。然而,假设你解决了这个问题。使用您编写的代码,您将文件的每个元素分配给名为file的列表(考虑到它至少有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())
tkclm6bt

tkclm6bt4#

使用 for i in range(files.size) 而不是 for i in files .

rsaldnfx

rsaldnfx5#

文件是一个包含字符串的列表,而不是整数。所以当你说‘文件中的i’时,你是在告诉它‘i’是一个字符串。然后,当您尝试执行file[i]时,它会给出一个错误,因为“i”是一个字符串,而不是int。因此,您可以说“for i in files”,而不是“for i in range(files.size)”或类似的内容

相关问题