在Python中搜索今天的日期文件

时间:2016-07-18 15:16:04

标签: python python-3.x datetime search

更新:如果您尝试使用Python搜索文件中的今天日期,我已将最终代码发布在下面的答案部分中。

我有一个包含程序创建的日志的文件夹。日志标题包含用户的名称和日志的创建日期。我正在尝试编写一个Python脚本,打开包含今天日期的日志并读取它们。我使用 datetime 来获取今天的日期,并使用今天在logFolderContent [x] 中搜索日期。我能够得到一个较小版本的这个脚本工作(搜索三个字符串),但当我试图重写它来搜索我遇到问题的文件夹。

以下是我的脚本。感谢@Steven Summers的帮助,我的代码更加整洁。我用新的代码替换了旧代码。我已经意识到脚本在尝试与今天的文件交互时崩溃了。

import os
import datetime

#  <><><><><><><><><><><><><><>     Get Today's Date    <><><><><><><><><><>    
today = datetime.date.today()
today = str(today)
runDate = today
print("Today's Date:", today, "\n\n\n")

#  <><><><><><><><><><><><><>     Get all today's files   <><><><><><><><><>    
logFolder = r"\\foamfile\logs\POHistory"
logFolderContent = os.listdir(logFolder)  # WORKING
logFolderContent.reverse()
print("log folder content", logFolderContent)
countFolderContent = len(logFolderContent)  # WORKING
print("Total Files in Folder:", countFolderContent)
eligibleLogs = []
continueLogSearch = "true"
x = 0
for i, file in enumerate(logFolderContent):
    if file.startswith(today):
        eligibleLogs.append(i)
        print("eligibleLogs[i] = ", eligibleLogs[i])
    elif not file.endswith(".txt"):
        print("Non-text file found and ignored")
    print(logFolderContent[i])

这是输出:

Today's Date: 2016-07-18

log folder content ['Thumbs.db', '2016-07-18-WIN7-BUYING.txt', (etc...) '2016-04-20-ERIC-NEW.txt']
Non-text file found and ignored
Thumbs.db
Traceback (most recent call last):
  File "U:/JustinG/Python/Directory/Complete_1.py", line 24, in <module>
    print("eligibleLogs[i] = ", eligibleLogs[i])
IndexError: list index out of range

process finished with exit code 1

当我删除行 logFolderContent.reverse()时,脚本会打印所有文件名(意味着它们符合下面的要求),并在到达具有今天日期的文件名时崩溃。

2 个答案:

答案 0 :(得分:2)

我建议使用for循环而不是while循环,这看起来像

for i, file in enumerate(logFolderContent):
    if file.startswith(today): # Assuming the files always start with the date
        eligibleLogs.append(i)
        # -1 gets last item in list | most recent
        print("eligibleLogs[i] = ", eligibleLogs[-1]) 
    elif not file.endswith(".txt"):
        print("Non-text file found and ignored")
        print(logFolderContent[i])

如果非文本文件也可以以date开头,则交换if语句,以便首先检查该文件是否为文本文件。或者添加一个和语句,使其以date开头并以.txt结尾

你所拥有的一个大问题是因为这一行和一个try / except语句

print("eligibleLogs[x] = ", eligibleLogs[x])

问题在于,因为并非每个文件都与日期匹配,因此eligibleLogs的大小与x不匹配,因此几乎可以保证您在列表中最多只能获得一个项目while循环终止。

例如,您的第一个匹配项可能是文件编号100,因此您的列表中有1个项目,但您尝试获取索引100处的项目,这会导致IndexError。然后你的循环终止,你就得到了你不期望的值。

另外,你已经意识到了,但只是指出了它。

eligibleLogs.append(i)

追加它匹配的文件的索引。也许你更喜欢这个,所以你的列表包含匹配的文件名。

eligibleLogs.append(file)

答案 1 :(得分:1)

感谢Steven Summers(请参阅上面的回答)并花一点时间玩我的代码,我终于让脚本按照需要运行了。如果其他人试图在Python中搜索今天日期的字符串,我已经重写了我的代码以用于更通用的目的并将其放在下面。感谢所有帮助过的人,希望这些代码对其他人有所帮助。

import os
import datetime
# <><><><><><><><><><>  Get Today's Date  <><><><><><><><><><>
today = datetime.date.today()
today = str(today)
# <><><><><><><><><><>  Get Today's Files  <><><><><><><><><><>
folder = "folderlocation"
folderContent = os.listdir(folder)
eligibleFiles = []
for i, file in enumerate(folderContent):
     if file.startswith(today):  # or -> if today in file
          eligibleFiles.append(file)
print(eligibleFiles)