我有特定路径的文件,需要在namefile(yyyymmdd.faifb1p16m2.nc)上逐个选择,其中yyyy是年份,mm是月份,dd是日期。我做了这样的代码:
results=[]
base_dir = 'C:/DATA2013'
os.chdir(base_dir)
files = os.listdir('C:/DATA2013')
for f in files:
results += [each for each in os.listdir('C:/DATA2013')
if each.endswith('.faifb1p16m2.nc')]
如果我只选择1月份和2月份的文件,我该怎么做呢,依此类推。谢谢。
答案 0 :(得分:1)
你可以这样做:
x = [i for i in results if i[4:6] == '01']
它将列出1月份的所有文件名。 假设您的所有文件格式与问题中描述的格式相同。
答案 1 :(得分:0)
要验证文件名,您可以使用datetime.strptime()
method:
#!/usr/bin/env python
import os
from datetime import datetime
from glob import glob
suffix = '.faifb1p16m2.nc'
def parse_date(path):
try:
return datetime.strptime(os.path.basename(path), '%Y%m%d' + suffix)
except ValueError:
return None # failed to parse
paths_by_month = [[] for _ in range(12 + 1)]
for path in glob(r'C:\DATA2013\*' + suffix): # for each nc-file in the directory
date = parse_date(path)
paths_by_month[date and date.month or 0].append(path)
print(paths_by_month[2]) # February paths
print(paths_by_month[0]) # paths with unrecognized date
答案 2 :(得分:0)
试试这个:
from os import *
results = []
base_dir = 'C://local'
chdir(base_dir)
files = listdir(base_dir)
for f in files:
if '.faifb1p16m2.nc' in f and f[4:6] == '01': #describe the month in this string
print f
答案 3 :(得分:0)
两个正则表达式:
\d{4}(?:\d?|\d{2})(?:\d?|\d{2})\.faifb1p16m2\.nc
\d{8}\.faifb1p16m2\.nc
示例数据:
第一个正则表达式将匹配所有这7个条目。第二个正则表达式只匹配1和5.我可能使正则表达式比我需要的更复杂。
你想要第二个正则表达式,但我只是列出第一个正则表达式。
from glob import glob
import re
re1 = r'\d{4}(?:\d?|\d{2})(?:\d?|\d{2})\.faifb1p16m2\.nc'
re2 = r'\d{8}\.faifb1p16m2\.nc'
l = [f for f in glob('*.faifb1p16m2.nc') if re.search(re1, f)]
m = [f for f in glob('*.faifb1p16m2.nc') if re.search(re2, f)]
print l
print
print m
#Then, suppose you want to filter and select everything with '12' in the list m
print filter(lambda x: x[4:6] == '12', m)
作为another similar solution shows你可以为os.listdir()抛弃glob,所以:
l = [f for f in glob('*.faifb1p16m2.nc') if re.search(re1, f)]`
成为:
l = [f for f in os.listdir() if re.search(re1, f)]
然后剩下的代码很棒。使用glob的一个好处是,您可以使用iglob
,它就像glob一样,但是作为迭代器,可以在浏览包含大量文件的目录时提高性能。
还有一件事,这是另一个概述为python's infamous lambda feature的stackoverflow帖子。它通常用于函数map
,reduce
,filter
等。