在匹配文件名(python 3.x)后撤消files.split
文件名: 文件1:在匹配文件名(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])
新数据\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上使用。