简体   繁体   English

将字符串列表与包含文件的路径进行比较

[英]comparing a list of strings with a path which contains files

i have a list of paths to files:我有一个文件路径列表:

rasterfiles= glob.glob(r'Y:\5_Wetter\system\ecmwf_data\temperature\*\*avg.tif')
rasterfiles = ['Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000291_temperature_avg.tif, 'Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000225_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000027_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000254_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000177_temperature_avg.tif,...']

and the list:和清单:

def dates_to_dayoftheyears(start, end):
    duration = end - start
    period = []
    for d in range(duration.days + 1):
        day = start + timedelta(days=d)
        period.append(day)
    year = []
    for day in period:
        year.append(day.strftime('%Y'))
    dayoftheyear = []
    for day in period:
        dayoftheyear.append(day.strftime('%j'))

    year_and_days = [a+ b for a,b in zip(year, dayoftheyear)]
    return year_and_days

print (dates_to_dayoftheyears(date(2013,4,1), date(2013,4,30)))

Output Output

['2013091', '2013092', '2013093', '2013094', '2013095', '2013096', '2013097', '2013098', '2013099', '2013100', '2013101', '2013102', '2013103', '2013104', '2013105', '2013106', '2013107', '2013108', '2013109', '2013110', '2013111', '2013112', '2013113', '2013114', '2013115', '2013116', '2013117', '2013118', '2013119', '2013120']

How can I only extract those files within my rasterfiles list which have the same string sequence as my second list?我怎样才能只提取我的rasterfiles列表中与我的第二个列表具有相同字符串序列的那些文件?

You can simply iterate through the values您可以简单地遍历这些值

import os

rasterfiles = ['Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000291_temperature_avg.tif', 'Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000225_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000027_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000254_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000177_temperature_avg.tif']

dates = ['2013091', '2013092', '2013093', '2013094', '2013095', '2013096', '2013097', '2013098', '2013099', '2013100', '2013101', '2013102', '2013103', '2013104', '2013105', '2013106', '2013107', '2013108', '2013109', '2013110', '2013111', '2013112', '2013113', '2013114', '2013115', '2013116', '2013117', '2013118', '2013119', '2013120']

result = []
for f in rasterfiles:
    for d in dates:
        if d in os.path.basename(f):
            result.append(f)

print(result)

In a more sophisticated version, you can use a regular expression to extract the date part of the filename and use it to compare to the dates list:在更复杂的版本中,您可以使用正则表达式提取文件名的日期部分,并使用它与日期列表进行比较:

import os
import re

rasterfiles = ['Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000291_temperature_avg.tif', 'Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000225_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000027_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000254_temperature_avg.tif','Y:\\5_Wetter\\system\\ecmwf_data\\temperature\\2000\\ecmwf_2000177_temperature_avg.tif']

dates = ['2013091', '2013092', '2013093', '2013094', '2013095', '2013096', '2013097', '2013098', '2013099', '2013100', '2013101', '2013102', '2013103', '2013104', '2013105', '2013106', '2013107', '2013108', '2013109', '2013110', '2013111', '2013112', '2013113', '2013114', '2013115', '2013116', '2013117', '2013118', '2013119', '2013120']

re_pattern = "[a-zA-Z]+_([0-9]{6,8})_.*"

result = []
for f in rasterfiles:
    m = re.search(re_pattern, os.path.basename(f))
    if (m != None):
        if m.group(1) in dates:
            result.append(f)

print(result)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM