我的目录folderMarket有许多同名的文件,但在末尾用日期字符串进行标记。日期标签的格式可以不同,例如"2018-07-25“或”25-7月18“。我的助手函数的任务是提取一个路径列表,将每个找到的文件名与filename_list匹配。是否有更好的方法来构建filename_list而不是下面使用的蛮力?
from datetime import datetime
strToday = "2018-07-25"
files_market = ['apples_DATE.xml', 'peaches_DATE.xml', 'cucumbers_DATE.xml', 'potatos_DATE.xml', 'tomates.DATE.csv']
def get_path_list(directory, base_filename_list, savedAsOf):
strDate1 = savedAsOf
filename_list1 = [n.replace('DATE', strDate1) for n in base_filename_list]
strDate2 = datetime.strptime(savedAsOf, '%Y-%m-%d').strftime('%d%b%y')
filename_list2 = [n.replace('DATE', strDate2) for n in base_filename_list]
filename_list = filename_list1 + filename_list2
path_list = []
for file in os.listdir(directory):
filename = os.fsdecode(file)
if filename in filename_list:
path_list.append(os.path.join(directory, filename))
continue
return path_list
print (len(get_path_list(folderMarket, files_market, strToday)))发布于 2018-07-31 07:56:00
if __name__ == "__main__":启动部分。我建议你买这个。例如,如果您没有这样的工具,当您使用Sphinx这样的工具生成代码文档时,它实际上将运行您的代码,而不仅仅是构建对象。而且,这也是一种预期:-)至于您拥有的核心问题,您可以使用pathlib的S Path对象来帮助文件的全局化和文件参数的匹配,以及字符串格式化format函数将“占位符”替换为某个值。例如:
from pathlib import Path
def get_path_list(directory, base_filename_list, saved_as_of):
for template in base_filename_list:
file_date = template.format(saved_as_of)
print(f"looking for {file_date}")
files = Path(directory).glob(file_date)
for file in files:
print(str(file))
if __name__ == "__main__":
today = "2018-07-25"
files_market = ['apples_{}.xml', 'peaches_{}.xml', 'cucumbers_{}.xml', 'potatoes_{}.xml', 'tomatoes.{}.csv']
get_path_list(".", files_market, today)上面的代码将为您提供90%的方法,但我将把它作为一个练习留给您完成。
祝好运!
发布于 2018-08-01 19:25:29
谢谢你的指点,这是我能掌握的全部。不知道如何按照您的意愿使用格式函数。如果我正确地解释了你的答案,我认为pathlib glob只接受str,而不是list。
from pathlib import Path
from datetime import datetime
def get_path_list(directory, base_filename_list, saved_as_of):
# list of possible save_as_of date formats
date = datetime.strptime(saved_as_of, '%Y-%m-%d')
formatted_dates_list = [saved_as_of,
date.strftime('%d%b%y'),]
#extended list with each possible date format combo
extended_base_filename_list = [f.replace("DATE", d) for f in base_filename_list
for d in formatted_dates_list]
globbed_list = [str(file.name) for f in formatted_dates_list
for file in Path(directory).glob('*' + f + '.*')]
#intersection of two lists
return list(set(extended_base_filename_list) & set(globbed_list))
if __name__ == "__main__":
today = "2018-07-25"
folder = "."
files_market = ['apples_DATE.xml', 'peaches_DATE.xml', 'cucumbers_DATE.xml', 'potatoes_DATE.xml', 'tomatoes.DATE.csv']
test = get_path_list(folder, files_market, today)
print(*test)这就产生了:
apples_2018-07-25.xml tomatos.25Jul18.csv cucumbers_2018-07-25.xml peaches_2018-07-25.xml potatos_2018-07-25.xmlhttps://codereview.stackexchange.com/questions/200620
复制相似问题