#!/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? 案件无关紧要。
冒泡排序很慢,没有?
答案 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