通过Python快速按字母顺序排序大文件

5 投票
3 回答
6045 浏览
提问于 2025-04-15 16:48
#!/usr/bin/python

import random
import string

appendToFile = open("appendedFile", "a" )

# Generator

for i in range(1, 100000):

    chars = "".join( [random.choice(string.letters) for i in xrange(15)] )
    chars2 = "".join( [random.choice(string.letters) for i in xrange(15)] )

    appendToFile.write(chars + ":" + chars2 + "\n")

appendToFile.close()

这段代码是从 这个问题 修改过来的。

上面的代码会生成10万行随机文本,格式是STRING:STRING。生成的文本文件大小是3.1 MB。

那么,如何快速按照STRING:STRING中的第一个STRING进行排序呢?大小写不重要。

冒泡排序是不是很慢呢?

3 个回答

1

试试这个(不区分大小写):

l=file(appendedFile).readlines()
l.sort(key=lambda x:x.lower())

对于这种大小的优化其实不是特别必要(在我这台慢机器上的时间测试;-):

christophe@orion:~$ time python -c "l=file('appendedFile').readlines();l.sort(key=lambda x:x.lower())"

real    0m0.615s
user    0m0.576s
sys 0m0.024s
8

最简单的方法就是直接用Python自带的排序功能。你是不是想的就是这个?如果不是,那为什么呢?对于只有10万行的随机文本,自带的排序功能会非常快。

lst = open("appendedFile", "rt").readlines()
lst.sort(key=str.lower)

搞定了。如果你真的想的话,我们可以把它写成一行代码:

lst = sorted(open("appendedFile", "rt").readlines(), key=str.lower)

编辑:我刚检查了一下,strings.letters包含了大写和小写字母。所以,上面的代码已经修改为不区分大小写。

编辑:关于Python排序的更多信息:http://wiki.python.org/moin/HowTo/Sorting

5

这个速度非常快(在我的电脑上不到1秒)。它使用的是不区分大小写的排序,我想这就是你所说的“大小写无关”的意思吧?

#!/usr/bin/python

appendToFile = open("appendedFile", "r")
sortToFile = open("sortedFile", "w")

for line in sorted(appendToFile, key = str.lower):
    sortToFile.write(line)

撰写回答