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

2024-10-01 15:43:33 发布

您现在位置:Python中文网/ 问答频道 /正文

更新:如果您试图用Python搜索一个文件来查找今天的日期,我已经在下面的答案部分发布了我的最终代码。在

我有一个包含程序创建的日志的文件夹。日志标题包含用户名和日志创建日期。我试图编写一个Python脚本,打开包含今天日期的日志并读取它们。我使用datetime来获取今天的日期,如果today在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])

输出如下:

^{pr2}$

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


Tags: 文件代码import脚本文件夹gettodaydatetime
2条回答

多亏了stevensummers(见上面的答案)和我花了一点时间来使用我的代码,我终于让脚本按预期工作了。如果有人试图用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)

我建议使用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])

如果非文本文件也可能以日期开头,则交换If语句,以便首先检查该文件是否为文本文件。或者添加一个and语句,使其以date和endswith.txt开始

你的问题是因为这行代码和try/except语句

^{pr2}$

问题是,由于不是每个文件都与日期匹配,因此eligibleLogs的大小与x不匹配,因此几乎可以保证,while循环终止时,列表中只有一个条目max。在

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

另外,你可能知道,但只是指出它。在

eligibleLogs.append(i)

它与附加的文件的索引匹配。也许您更喜欢这样,这样您的列表就包含找到的匹配项的文件名。在

eligibleLogs.append(file)

相关问题 更多 >

    热门问题