如何使用单独的名称加载文件夹中的所有.txt文件

2024-09-30 02:17:38 发布

您现在位置:Python中文网/ 问答频道 /正文


我必须通过导入文件夹中的所有.txt文件来创建一组numpy数组。我现在就是这样做的:

wil_davide_noIA_IST_nz300           = np.genfromtxt("%s/davide/wil_davide_noIA_IST_nz300.txt" %path)
wig_davide_multiBinBias_IST_nz300   = np.genfromtxt("%s/davide/wig_davide_multiBinBias_IST_nz300.txt" %path)
wig_davide_multiBinBias_PySSC_nz300 = np.genfromtxt("%s/davide/wig_davide_multiBinBias_PySSC_nz300.txt" %path)
wig_davide_noBias_PySSC_nz300       = np.genfromtxt("%s/davide/wig_davide_noBias_PySSC_nz300.txt" %path)
wig_davide_IST_nz300                = np.genfromtxt("%s/davide/wig_davide_IST_nz300.txt" %path)
wig_davide_noBias_IST_nz300         = np.genfromtxt("%s/davide/wig_davide_noBias_IST_nz300.txt" %path)
wig_davide_PySSC_nz300              = np.genfromtxt("%s/davide/wig_davide_PySSC_nz300.txt" %path)
...

从文件夹中

enter image description here

我能以某种方式自动化这个过程吗?请注意,我希望数组与导入的文件具有相同的名称(当然没有.txt)
多谢各位


Tags: 文件pathtxt文件夹np数组wiggenfromtxt
3条回答

提醒:如果文件或其名称存在任何安全问题,您不应该这样做

否则,您可以使用exec函数来获取所需的变量。 有关列表方法,请参见其他解决方案

import os
path_to_folder = "."
command = ""
for f in os.listdir(path_to_folder):
    if f.endswith(".txt"):
        command += f.replace(".txt", "") + f" = np.genfromtxt('{path_to_folder}/{f}')\n"
exec(command)

根据您的文件夹/文件结构,您可能需要对代码进行一些更改,但这应该按照要求进行

这就是获取所有文件名的方法

path是您的文件路径("./"如果在同一目录中)

import os

path = "./"

filenames = []
for filename in os.listdir(path):
  filenames.append[file]

...

此外,您还可以使用提供的if结构过滤某些文件。这里我只选择txt文件

filter是一些可以应用的过滤器(使用"." not in file获取目录)

import os

path = "./"
filter = ".txt"

txt_filenames = []
for filename in os.listdir(path):
  if filter in file:
    txt_filenames.append[filename]

...

我还没有对此进行测试,但我认为这个伪代码应该可以工作——关于它的唯一“伪”是硬编码的"dir/to/files"字符串,您必须将其更改为包含文本文件的目录的路径。在现代Python中,您将使用pathlibglob标准库模块来迭代给定目录中的所有文本文件。创建一个数量可变的变量,并在运行时确定变量名从来都不是一个好主意。相反,将numpy数组保存在某种集合中。在本例中,我建议使用字典,这样您就可以按键访问各个numpy数组,其中键是作为字符串的相应文件的名称,当然不带扩展名:

def get_kv_pairs():
    from pathlib import Path
    for path in Path("dir/to/files").glob("*.txt"):
        yield path.stem, np.genfromtxt(str(path))
        

arrays = dict(get_kv_pairs())

print(arrays["wil_davide_noIA_IST_nz300"]) # Here's how you would access the individual numpy arrays.

相关问题 更多 >

    热门问题