如何将所有 .txt 文件加载到具有不同名称的文件夹中 - Python
How to load all .txt files in a folder with separate names - 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)
...
来自文件夹
我能否以某种方式使流程自动化?请注意,我希望数组与导入的文件同名(当然不包括 .txt)。
非常感谢
这是获取所有文件名的方法。
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]
...
注意:如果文件或其名称存在任何安全问题,您不应该这样做。
否则你可以使用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)
根据您的 folder/file 结构,您可能需要稍微更改一下代码,但这应该会像要求的那样工作。
我还没有测试过,但我认为这个伪代码应该可以工作——唯一“伪”的是硬编码的 "dir/to/files"
字符串,您必须将其更改为路径到包含文本文件的目录。在现代 Python 中,您将使用 pathlib
或 glob
标准库模块来遍历给定目录中的所有文本文件。创建可变数量的变量,并在运行时确定变量名从来都不是一个好主意。相反,将您的 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.
我必须通过从文件夹中导入所有 .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)
...
来自文件夹
我能否以某种方式使流程自动化?请注意,我希望数组与导入的文件同名(当然不包括 .txt)。
非常感谢
这是获取所有文件名的方法。
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]
...
注意:如果文件或其名称存在任何安全问题,您不应该这样做。
否则你可以使用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)
根据您的 folder/file 结构,您可能需要稍微更改一下代码,但这应该会像要求的那样工作。
我还没有测试过,但我认为这个伪代码应该可以工作——唯一“伪”的是硬编码的 "dir/to/files"
字符串,您必须将其更改为路径到包含文本文件的目录。在现代 Python 中,您将使用 pathlib
或 glob
标准库模块来遍历给定目录中的所有文本文件。创建可变数量的变量,并在运行时确定变量名从来都不是一个好主意。相反,将您的 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.