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

在匹配文件名(python 3.x)后撤消files.split,python,split,filenames,Python,Split,Filenames,文件名: 文件1:新数据\u 20100101.csv 文件2:samples\u 20100101.csv 在文件名中,时间戳始终为%Y%m%d,在之后和之前.csv 我想找到有数据和样本文件的文件,然后对这些文件执行一些操作: 到目前为止,我的代码是: for all_files in os.listdir(): if all_files.__contains__("data_"): dataList.append(all_files.split('_')[2])

文件名:

文件1:
新数据\u 20100101.csv
文件2:
samples\u 20100101.csv

在文件名中,时间戳始终为
%Y%m%d
,在
之后和
之前.csv

我想找到有
数据
样本
文件的文件,然后对这些文件执行一些操作: 到目前为止,我的代码是:

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])
这使我的文件名缩减为
时间戳
和扩展名
.csv

现在我想试试这样的东西

for day in dataList:
    if day in sampleList:
         open day as csv.....
我得到了两个文件都有时间戳的日期列表。。。如何撤消该文件。现在拆分,以便aI可以继续处理这些文件,因为现在我会收到一个错误,告诉我,例如
\u 2010010.csv
不存在,因为它是
新数据\u 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))
导入全局
导入操作系统
csv_files=glob.glob('*.csv')
data_files={file.split(“')[2]:csv_文件中文件的文件,如果文件中的“data_u”}
sample_files={file.split(“')[1]:如果文件}中的“samples_u”,则csv_文件中的文件对应文件
匹配的_对=[(样本_文件[date],文件)表示日期,数据_文件中的文件。如果样本_文件中的日期为,则为items()
对于示例文件,数据文件按排序(匹配对):
打印(“{}{}.”格式(示例文件、数据文件))
对于双文件示例,这将显示以下内容:

samples_20100101.csv <-> new_data_20100101.csv
samples\u 20100101.csv新数据\u 20100101.csv

这看起来很有趣,我遇到了一个问题,
为日期匹配_对=[(样本文件[date],file)为日期,数据文件中的文件。如果样本文件中的日期为iteritems())
是否需要将
ìteritems
也放在其他地方?我对答案做了一些修改,因为它是为Python 2.0设计的。它现在应该可以在Python3.0上使用。