如何在列表中搜索字符串的特定部分并列出它们? Python 2.7

时间:2016-09-23 10:30:54

标签: python arrays list

在一些帮助下,我希望从一堆文本文件中构建一个字符串列表,其中文件名的日期戳超过三天,输出列表只包含部分字符串,即filename = 2016_08_18_23_10_00 - 播放列表,文件中的字符串是E:\ media \ filename.mxf或D:\ media2 \ filename.mxf。我希望列表只包含filename.mxf。到目前为止,我有以下内容:

## imports modules ##

from datetime import datetime, timedelta
import os
import re

## directory ##

path = r"C:\Users\michael.lawton\Desktop\Housekeeper\Test"

## days to subtract variable ##

days_to_subtract = 3

## re-import datetime module ##

import datetime

## finds all files with date and time stamp. If statement is true adds them to list ##

lines = []
for filename in os.listdir(path):
  date_filename = datetime.datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S')
  if date_filename < datetime.datetime.now()- datetime.timedelta(days=days_to_subtract):
    with open(os.path.join(path, filename), 'r') as f:
      lines.extend(f.readlines()) # put all lines into array

## opens files in array ##

  print filename # debug
  file = open(os.path.join(path,filename), 'r')
  print file.read() # debug
  rasp = file.read()

## search for all strings containing .mxf from array ##

import fnmatch
import os.path
pattern = "*.mxf"
matching = [os.path.basename(s) for s in file if fnmatch.fnmatch(s,  pattern)]
print matching

# currently the output is empty i.e. []

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望将超过三天的所有“mxf”类型的文件放入数组中。你做的事情比你必须做的更复杂。只需检查文件名是否与您定义的模式匹配,并将这些文件添加到数组中(例如匹配文件):

## imports modules ##

from datetime import datetime, timedelta
import os
import re
import fnmatch
import os.path

## directory ##

path = r"C:\Users\michael.lawton\Desktop\Housekeeper\Test"

## days to subtract variable ##

days_to_subtract = 3

pattern = "*.mxf"

## finds all files with date and time stamp. If statement is true adds them to list ##

matchingfiles = []
for filename in os.listdir(path):
  date_filename = datetime.strptime(filename.split(" ")[0], '%Y_%m_%d_%H_%M_%S')
  if date_filename < datetime.now() - datetime.timedelta(days=days_to_subtract):
    if fnmatch.fnmatch(filename, pattern):
      matchingfiles.append(os.path.join(path, filename)) # put all matching filenames in array
      # if you just want to include the filename, you can do this instead:
      # matchingfiles.append(filename)

print matchingfiles

无需重新导入日期时间,您只需使用datetime.strptime代替datetime.datetime.strptime即可。并将所有导入放在文件的顶部,这使得阅读和维护代码变得更加容易。