使用Python使用特定种子和速度编号分隔csv文件路径



我遇到一个问题,我有一个csv文件路径列表。我需要使用Python在不同种子和相同速度的特定模式的基础上分离CSV文件路径。命名约定是这样的:

CSV文件的绝对路径/(模式((种子((速度(.CSV

csv_filepaths=['C:/Users/DELL/Documents/abc/alpha_586893215_speed0.csv','C:/Users/DELL/Documents/abc/alpha_58689215_speed4.csv'、'C:/Users/DEL/Documents/acc/alpha2_123456787_speed0.csv'、'C:/Users/DELL/Documents/Acc/alpha 2_123456787_speed4.csv'和'C:/用户/DEL/DDocuments/acc/aalpha2_886589746_speed0.csv'9746_speed4.csv','C:\/Users/DELL/Documents/abc/beta1_52186893215_speed0.csv','C:/Users/DELL/Documents/abc/beta1_52186893215_speed4.csv'、'C:/Users/DELL/Document/abc/bata1_86893215_speed0.csv','C:\/Users/DELL/Documents/abc/beta1_868932115_speed4.csv']

我想要这样的输出:

['C:/Users/DELL/Documents/abc/alpha_586893215_speed0.csv']
['C:/Users/DELL/Documents/abc/alpha_2_123456787_speed0.csv', 'C:/Users/DELL/Documents/abc/alpha_2_886589746_speed0.csv']
['C:/Users/DELL/Documents/abc/beta_1_52186893215_speed0.csv', 'C:/Users/DELL/Documents/abc/beta_1_86893215_speed0.csv']
['C:/Users/DELL/Documents/abc/alpha_586893215_speed4.csv']
['C:/Users/DELL/Documents/abc/alpha_2_123456787_speed4.csv', 'C:/Users/DELL/Documents/abc/alpha_2_886589746_speed4.csv']
['C:/Users/DELL/Documents/abc/beta_1_52186893215_speed4.csv', 'C:/Users/DELL/Documents/abc/beta_1_86893215_speed4.csv']

如果识别每个列表的唯一键必须是模式速度的组合,那么我建议使用该键创建一个字典,并保留与该键对应的所有路径的列表。

csv_filepaths = [
"C:/Users/DELL/Documents/abc/alpha_586893215_speed0.csv",
"C:/Users/DELL/Documents/abc/alpha_586893215_speed4.csv",
"C:/Users/DELL/Documents/abc/alpha2_123456787_speed0.csv",
"C:/Users/DELL/Documents/abc/alpha2_123456787_speed4.csv",
"C:/Users/DELL/Documents/abc/alpha2_886589746_speed0.csv",
"C:/Users/DELL/Documents/abc/alpha2_886589746_speed4.csv",
"C:/Users/DELL/Documents/abc/beta1_52186893215_speed0.csv",
"C:/Users/DELL/Documents/abc/beta1_52186893215_speed4.csv",
"C:/Users/DELL/Documents/abc/beta1_86893215_speed0.csv",
"C:/Users/DELL/Documents/abc/beta1_86893215_speed4.csv",
]
output = {}
for f in csv_filepaths:
*_, filename = f.split("/")  # get the filename form the complete path
filename, _ = filename.split(".")  # remove the extension
mode, seed, speed = filename.split("_")
output.setdefault((mode, speed), []).append(f)
for out in output.values():
print(out)

注意:行output.setdefault((mode, speed), []).append(f)只是的简写

if (mode, speed) in output:
output[(mode, speed)].append(f)
else:
output[(mode, speed)] = [f]

将文件名从列表中删除的更好方法是使用像os.pathpathlib这样的库(我个人选择后者(,但这里我包含了一种没有库的天真方法,因为路径操作不是您问题的重点。

最新更新