微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在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()

和“文件”包含大约 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,它包含 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 个不同的变量。我不明白你为什么需要这个,但是:

  1. @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 举报,一经查实,本站将立刻删除。