Python:迭代目录中的文件并将文件名用作变量

时间:2018-02-21 18:54:28

标签: python-3.x numpy

亲爱的stackoverflow用户,

我正在努力解决以下问题:

我有一个包含多个文件的目录,例如

datasets/
    dataset1.txt
    dataset2.txt
    dataset3.txt
    dataset4.txt
    dataset5.txt

并读出文件并将其内容分配给一个变量,该变量是没有文件类型扩展名的文件名。要明确:dataset1.txt的内容应保存到变量dataset1dataset2.txt的内容应保存到变量dataset2,依此类推。

我知道我可以使用以下函数迭代我文件夹的内容:

for root, dirs, files in os.walk('.'):
print(files)

但最后它应该做类似于下面的事情:

for root, dirs, files in os.walk('.'):
for file in files:
file.split('.')[0] = numpy.loadtxt(file) # here it should create e.g. a variable dataset1 and read content of dataset1 into it.

这怎么可能?

此致

2 个答案:

答案 0 :(得分:2)

我会在这种情况下使用字典:

fileSet = {}

for root, dirs, files in os.walk('.'):
   for file in files:
      fileSet[file.split('.')[0]] = numpy.loadtxt(file)

然后您可以使用表达式访问内容,例如

dataset1Val = fileSet['dataset1']

答案 1 :(得分:0)

你应该在这里使用字典。字典给你的优势就是那个

  1. 您可以使用密钥快速访问任何文件中的数据。
  2. 要遍历所有文件中的数据,您不需要做很多努力工作,而只需执行for key in my_file_dict.keys()
  3. 要快速查找文件中的文本,字典会派上用场。
  4. 以下代码从文件中读取数据,将其转换为列表,然后将其存储到dictionary,其中key为文件名

    为了使其更加以效果为导向,您也可以使用DictionaryComprehension而不是传统的嵌套for loops

    output_dict = {file.split('.')[0] : numpy.loadtxt(f'{directory_path}\\{file}').tolist() for root, dirs, files in os.walk(directory_path) for file in files}
    

    传统方式:

    output_dict = {}
    for root, dirs, files in os.walk(path):
        for file in files:
            output_dict[file.split('.')[0]] = numpy.loadtxt(f'{path}\\{file}').tolist()