2016-05-14 1 views
0

Ich arbeite an etwas. Hier ist, was der CodeWie kann ich eine Datei lesen, Inhalt in ein Array, mischen Sie das Array, und dann schreibe das gemischt Array in die Datei in Python 2.7

  1. Lesen Sie die Datei
  2. Setzen Sie jede Zeile in ein Element in einem Array
  3. Mische das Array in möglichst viele schlurft tun muss, es kann. Werde erklären, erstellen unter
  4. eine neue Datei, die neu gemischten Worte zu speichern

Nummer 3 erklärt: datei.txt enthält folgende

this 
is 
a 
test 

Es wäre zu jedem möglichen Ergebnis mischen müssen. So

this is a test 
this a is test 
this test is a 
this test a is 

Und so weiter und so fort. Es gibt 16 mögliche Ergebnisse, also werde ich meine Frage damit nicht überschwemmen.


Ich verwende den folgenden Code in Python 2,7

file = raw_input('Enter File Name: ') 
with open(file, 'r+') as f: 
    array = list(f) 
    print array 

Der Ausgang dieses ist, die (mit Ausnahme der '\ n') vollständig in Ordnung ist:

['this\n', 'is\n', 'a\n', 'test'] 

Jetzt, Immer wenn ich shuffle() verwende, verwende ich diesen Code

from random import shuffle 
file = raw_input('Enter File Name: ') 
with open(file, 'r+') as f: 
    array = list(f) 
    new = shuffle(array) 
    print new 

Der Ausgang ist dies:

None 

Ich weiß, um zu schreiben, muss ich w + verwenden und tun f.write (neu) dann f.close(), es löscht mein file.txt und speichert es leer

Wie kann ich das tun?

+0

Gäbe es nicht 4 sein! = 24 Möglichkeiten statt 16? In jedem Fall - kennst du "itertools"? –

+0

Oh ja. Du hast recht, ich habe 4 * 4 statt der Fakultät gemacht. Jedenfalls bin ich nicht. Ich werde es mir ansehen! – notissac

Antwort

0

Sie können itertools verwenden:

>>> import itertools 
>>> words = ['this', 'is', 'a', 'test'] 
>>> for p in itertools.permutations(words): print ' '.join(p) 

this is a test 
this is test a 
this a is test 
this a test is 
this test is a 
this test a is 
is this a test 
is this test a 
is a this test 
is a test this 
is test this a 
is test a this 
a this is test 
a this test is 
a is this test 
a is test this 
a test this is 
a test is this 
test this is a 
test this a is 
test is this a 
test is a this 
test a this is 
test a is this 

Offensichtlich können die Drucke durch Schreiben in eine Datei ersetzt werden.

Wenn die Eingabedatei nicht zu groß ist, können Sie Loops mit Comprehensions ersetzen und Voll-Datei verwenden, liest und schreibt:

import itertools 

with open('test.txt','r') as infile, open('shuffles.txt','w') as outfile: 
    words = infile.read().strip().split('\n') 
    shuffles = itertools.permutations(words) 
    output = '\n'.join(' '.join(shuffle) for shuffle in shuffles) 
    outfile.write(output) 
+0

Das hilft sehr, aber ich stoße auf ein anderes Problem. Die Datei sollte schon geöffnet sein, nein? http://prntscr.com/b41vh1 – notissac

+0

Ja, öffnen Sie die Zieldatei für das Schreiben vor dem Durchlaufen der Permutationen. Schließen Sie es danach. –

Verwandte Themen