繁体   English   中英

如何使用 python 更快地搜索和读取特定文件夹中的文本文件

[英]How to search and read a text file in a specific folder faster using python

我编写了一个简单的 python 脚本来搜索文件夹中的日志文件(大约有 400 万个文件)并读取该文件。 目前,整个操作的平均时间为 20 秒。 我想知道是否有一种方法可以更快地获得响应。

下面是我的脚本

import re
import os
import timeit
from datetime import date

log_path = "D:\\Logs Folder\\"
rx_file_name = r"[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}"
log_search_script = True
today = str(date.today())

while log_search_script:

    try:

        log_search = input("Enter image file name: ")

        file_name = re.search(rx_file_name, log_search).group()

        log_file_name = str(file_name) + ".log"

        print(f"\nLooking for log file '{log_file_name}'...\n")
        pass

    except:
        print("\n ***** Invalid input. Try again! ***** \n")
        continue

    start = timeit.default_timer()

    if log_file_name in os.listdir(log_path):

        log_file = open(log_path + "\\" + log_file_name, 'r', encoding="utf8")

        print('\n' + "--------------------------------------------------------" + '\n')

        print(log_file.read())
        log_file.close()

        print('\n' + "--------------------------------------------------------" + '\n')

        print("Time Taken: " + str(timeit.default_timer() - start) + " seconds")

        print('\n' + "--------------------------------------------------------" + '\n')

    else:
        print("Log File Not Found")

    search_again = input('\nDo you want to search for another log ("y" / "n") ?').lower()
    if search_again[0] == 'y':
        print("======================================================\n\n")
        continue

    else:
        log_search_script = False

你的问题是这条线:

if log_file_name in os.listdir(log_path):

这有两个问题:

  1. os.listdir将创建一个巨大的列表,这可能需要大量时间(和空间......)。
  2. ... in...部分现在将 go 在这个巨大的列表上线性搜索并搜索文件。

相反,让您的操作系统完成艰苦的工作并请求宽恕,而不是许可 假设文件在那里并尝试打开它。 如果它实际上不存在 - 将引发错误,我们将捕获:

try:
    with open(log_path + "\\" + log_file_name, 'r', encoding="utf8") as file:
        print(log_file.read())
except FileNotFoundError:
    print("Log File Not Found")

您可以使用 glob。

import glob
print(glob.glob(directory_path))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM