Domanda

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

Codice modificato da questa domanda.

Il codice precedente genera 100.000 righe di testo casuale nel formato STRING:STRING.Il file di testo risultante è di 3,1 MB.

Come si potrebbe alfabetizzare rapidamente il file, utilizzando la prima STRINGA in STRING:STRING?Il caso è irrilevante.

L'ordinamento delle bolle è molto lento, no?

È stato utile?

Soluzione

Questo è molto veloce (meno di 1 secondo sul mio computer). Esso utilizza un case-insensitive sorta, che è scontato ciò che si intende per "caso è irrilevante"?

#!/usr/bin/python

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

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

Altri suggerimenti

Il primo approccio ovvio è semplicemente quello di utilizzare la funzionalità di ordinamento incorporata in Python.Non è questo quello che avevi in ​​mente?Se no, perché?Con solo 100.000 righe di testo casuale, l'ordinamento integrato sarebbe molto veloce.

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

Fatto.Potremmo farlo come una battuta se davvero lo volessi:

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

MODIFICARE:Ho appena controllato e strings.letters comprende sia lettere maiuscole che minuscole.Pertanto, il codice precedente viene modificato per non fare distinzione tra maiuscole e minuscole.

MODIFICARE:altro sull'ordinamento in Python: http://wiki.python.org/moin/HowTo/Sorting

Prova questo (case insensitive):

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

Per questi tipi di dimensioni dall'ottimizzazione non è davvero necessario (calendari sulla mia macchina lenta; -):

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top