通过Python快速按字母顺序排序大文件
#!/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)