匹配文件名后撤消 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
之前
我想找到包含 data
和 samples
文件的文件,然后对这些文件执行一些操作:
到目前为止我的代码:
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
文件名:
文件 1:new_data_20100101.csv
文件 2:samples_20100101.csv
时间戳总是 = %Y%m%d
在文件名中 _
之后和 .csv
我想找到包含 data
和 samples
文件的文件,然后对这些文件执行一些操作:
到目前为止我的代码:
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