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

时间:2009-12-08 23:12:03

标签: python file alphabetical

#!/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()

this question修改的代码。

以上代码以STRING:STRING的格式生成100,000行随机文本。结果文本文件为3.1 MB。

如何使用STRING中的第一个STRING快速将文件字母化:STRING? 案件无关紧要。

冒泡排序很慢,没有?

3 个答案:

答案 0 :(得分:8)

显而易见的第一种方法是使用Python中的内置排序功能。这不是你想到的吗?如果没有,为什么?只有100,000行随机文本,内置排序会非常快。

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

答案 1 :(得分:5)

这非常快(在我的电脑上不到1秒)。它使用不区分大小写的排序,假设“case is irrelevant”是什么意思?

#!/usr/bin/python

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

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

答案 2 :(得分: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