1

我正在尝试读取一个目录中的一些文件,该目录有 10 个文本文件。随着时间的推移,文件的数量会增加,到现在的总大小约为 400MB。

文件内容采用以下格式:

student_name:student_ID:date_of_join:anotherfield1:anotherfield2

如果匹配,我必须打印出整行。这是我尝试过的。

findvalue = "student_id" #this is users input alphanumeric
directory = "./RecordFolder"
for filename in os.listdir(directory):
    with open(os.path.join(directory, filename)) as f:
        for line in f:
            if findvalue in line:
                print line

这可行,但需要很多时间。如何减少运行时间?

4

2 回答 2

4

当文本文件变得太慢时,您需要开始查看数据库。数据库的主要目的之一是智能地处理来自持久数据存储的 IO。

根据您的应用程序的需要,SQLite可能是一个不错的选择。我怀疑这是您想要的,因为您似乎没有庞大的数据集。从那里开始,只需进行数据库 API 调用并允许 SQLite 处理查找 - 它比您做得更好!

如果(出于某种奇怪的原因)您真的不想使用数据库,那么如果可能的话,请考虑进一步将您的数据分解成一棵树。例如,您可以为放置学生数据的字母表中的每个字母创建一个文件。这应该会减少循环时间,因为您正在减少每个文件的学生人数。这是一个快速的技巧,但我认为如果你使用数据库,你会减少头发。

于 2012-08-04T19:49:47.723 回答
1

IO 与计算相比是出了名的慢,并且鉴于您正在处理大文件,它可能最好逐行处理文件。我看不到在 Python 中加快速度的明显简单方法。

根据您的“点击”(即,findvalue in line)的频率,您可能会决定写入文件,以免控制台输出可能减慢速度,但如果找到的项目相对较少,则不会产生太大影响一个区别。

我认为对于 Python 来说,没有什么明显和重要的事情可以做。您总是可以探索其他工具(例如 grep 或数据库 ...)作为替代方法。

PS:不需要else:pass..

于 2012-08-04T15:50:52.697 回答