Python 如何使用pathlib.Path().glob()遍历目录并在每次迭代时读入2个文件

Python 如何使用pathlib.Path().glob()遍历目录并在每次迭代时读入2个文件,python,loops,for-loop,glob,pathlib,Python,Loops,For Loop,Glob,Pathlib,使用pathlib.Path.glob,我们如何迭代一个目录并在每次迭代时读取2个文件 假设我的目录C:\Users\server\Desktop\Dataset如下所示: P1_mean_fle.csv P2_mean_fle.csv P3_mean_fle.csv P1_std_dev_fle.csv P2_std_dev_fle.csv P3_std_dev_fle.csv from pathlib import Path import pandas as pd file_path =

使用pathlib.Path.glob,我们如何迭代一个目录并在每次迭代时读取2个文件

假设我的目录C:\Users\server\Desktop\Dataset如下所示:

P1_mean_fle.csv
P2_mean_fle.csv
P3_mean_fle.csv
P1_std_dev_fle.csv
P2_std_dev_fle.csv
P3_std_dev_fle.csv
from pathlib import Path
import pandas as pd

file_path = r'C:\Users\server\Desktop\Dataset'
param_file = 'P*' + '_mean_fle.csv'

for i, fle in enumerate(Path(file_path).glob(param_file)):
    mean_fle = pd.read_csv(fle).values

    results = tuning(mean_fle)  #tuning is some function which takes in the file mean 
                                #and does something with this file
如果我想在Pi的每次迭代中只读取1个文件,我的代码如下所示:

P1_mean_fle.csv
P2_mean_fle.csv
P3_mean_fle.csv
P1_std_dev_fle.csv
P2_std_dev_fle.csv
P3_std_dev_fle.csv
from pathlib import Path
import pandas as pd

file_path = r'C:\Users\server\Desktop\Dataset'
param_file = 'P*' + '_mean_fle.csv'

for i, fle in enumerate(Path(file_path).glob(param_file)):
    mean_fle = pd.read_csv(fle).values

    results = tuning(mean_fle)  #tuning is some function which takes in the file mean 
                                #and does something with this file
现在,我如何在Pi的每次迭代中读入2个文件?下面的代码不太有效,因为param_文件只能分配一种文件名类型。如果有办法使用pathlib来实现这一点,我们将不胜感激


提前感谢您。

我建议您采用两种方法:

一,

如果您确定所有文件的编号都没有“孔”,那么您可以不带“glob”直接获取它们:

mean_csv_pattern = 'P{}_mean_fle.csv'
std_dev_pattern = 'P{}_std_dev_fle.csv'

i = 0
while True:
    i += 1
    try:
        mean_fle = pd.read_csv(mean_csv_pattern.format(i)).values
        std_dev_fle = pd.read_csv(std_dev_pattern.format(i)).values
    except (<put your exceptions here>):
        break
    results = tuning(mean_fle, std_dev_fle)
二,

使用预取操作,获取所有文件,并将它们放入可以在主循环中查询的结构中

Glob代表mean文件,Glob代表std_-dev文件,从文件名中提取数字,并创建一个字典{索引:{'mean_-file':mean_-file,'std_-file':std_-file}
然后循环排序的字典键…

我建议您使用两种方法:

一,

如果您确定所有文件的编号都没有“孔”,那么您可以不带“glob”直接获取它们:

mean_csv_pattern = 'P{}_mean_fle.csv'
std_dev_pattern = 'P{}_std_dev_fle.csv'

i = 0
while True:
    i += 1
    try:
        mean_fle = pd.read_csv(mean_csv_pattern.format(i)).values
        std_dev_fle = pd.read_csv(std_dev_pattern.format(i)).values
    except (<put your exceptions here>):
        break
    results = tuning(mean_fle, std_dev_fle)
二,

使用预取操作,获取所有文件,并将它们放入可以在主循环中查询的结构中

Glob代表mean文件,Glob代表std_-dev文件,从文件名中提取数字,并创建一个字典{索引:{'mean_-file':mean_-file,'std_-file':std_-file}
然后循环排序的字典键…

如果文件名遵循示例中的确定性规则,那么最好迭代一种文件,并通过字符串替换找到相应的文件

from pathlib import Path
import pandas as pd

file_path = r'C:\Users\server\Desktop\Dataset'
param_file = 'P*' + '_mean_fle.csv'

for i, fle in enumerate(Path(file_path).glob(param_file)):
    stddev_fle = fle.with_name(fle.name.replace("mean", "std_dev"))
    mean_values = pd.read_csv(fle).values
    stddev_values = pd.read_csv(stddev_fle).values

    results = tuning(mean_values, stddev_values)

如果文件名遵循示例中的确定性规则,那么最好迭代一种文件,并通过字符串替换找到相应的文件

from pathlib import Path
import pandas as pd

file_path = r'C:\Users\server\Desktop\Dataset'
param_file = 'P*' + '_mean_fle.csv'

for i, fle in enumerate(Path(file_path).glob(param_file)):
    stddev_fle = fle.with_name(fle.name.replace("mean", "std_dev"))
    mean_values = pd.read_csv(fle).values
    stddev_values = pd.read_csv(stddev_fle).values

    results = tuning(mean_values, stddev_values)

谢谢@Don,这是glob的一个很好的替代品。我能问一下你这里的“洞”是什么意思吗?@Leockl,我的意思是你必须确保从1开始拥有所有文件:如果你有文件1、2和4,循环将在尝试获取文件“3”时停止。谢谢@Don,这是glob的一个很好的替代品。我能问一下你这里的“洞”是什么意思吗?@Leockl,我的意思是y您必须确保从1开始拥有所有文件:如果您拥有文件1、2和4,则在尝试获取文件“3”Hi@Torben Klein时,循环将停止,如果fle.name.replacement,std_dev在这里是fle.name.replace_mean_fle.csv,_std_dev_fle.csv,则两者都可以工作。替换对给定文本的搜索,并用第二个文本替换它。请参阅Hi@Torben Klein,这里的fle.name.replacemean,std_dev是否应该是fle.name.replace_mean_fle.csv,_std_dev_fle.csv?两者都可以。替换对给定文本的搜索并用第二个文本替换。请参阅