匹配文件名后撤消 files.split (python 3.x)

Undo files.split after matching Filename (python 3.x)

文件名:

文件 1:new_data_20100101.csv 文件 2:samples_20100101.csv

时间戳总是 = %Y%m%d在文件名中 _ 之后和 .csv

之前

我想找到包含 datasamples 文件的文件,然后对这些文件执行一些操作: 到目前为止我的代码:

for all_files in os.listdir():
    if all_files.__contains__("data_"):
        dataList.append(all_files.split('_')[2])
    if all_files.__contains__("samples_"):
        samplesList.append(all_files.split('_')[1])

这给了我缩减为 Timestamp 和扩展名 .csv

的文件名

现在我想尝试这样的事情

for day in dataList:
    if day in sampleList:
         open day as csv.....

我得到了一个日期列表,其中两个文件都有时间戳...我现在如何撤消 files.split 这样我就可以继续使用这些文件,因为现在我会收到一条错误消息,告诉我对于实例 _2010010.csv 不存在,因为它是 new_data_2010010.csv 我有点不确定如何使用 os.basename 所以我希望能得到一些关于数据名称的建议。 谢谢

您可以改为使用 glob 模块来获取您的列表。这允许您只过滤 CSV 个文件。

以下脚本创建两个字典,每个字典的键是文件名的日期部分,值是整个文件名。列表理解创建一个包含每个匹配对的元组列表:

import glob
import os

csv_files = glob.glob('*.csv')

data_files = {file.split('_')[2] : file for file in csv_files if 'data_' in file}
sample_files = {file.split('_')[1] : file for file in csv_files if 'samples_' in file}
matching_pairs = [(sample_files[date], file) for date, file in data_files.items() if date in sample_files]

for sample_file, data_file in sorted(matching_pairs):
    print('{} <-> {}'.format(sample_file, data_file))

对于您的两个文件示例,这将显示以下内容:

samples_20100101.csv <-> new_data_20100101.csv