2011-01-11 24 views
2

Ich muss eine Liste in eine Datei in Python schreiben. Ich weiß, dass die Liste in eine Zeichenfolge mit der Join-Methode konvertiert werden sollte, aber da ich ein Tupel habe, war ich verwirrt. Ich habe versucht, eine Menge meiner Variablen in Strings usw. zu ändern, dann ist dies eine meiner ersten Versuche:Python eine Liste in eine Datei schreiben

def perform(text): 
    repository = [("","")] 
    fdist = nltk.FreqDist(some_variable) 
    for c in some_variable: 
     repository.append((c, fdist[c])) 
    return ' '.join(repository) 

aber es gibt mir die folgende Fehlermeldung:

Traceback (most recent call last): 
    File "<pyshell#120>", line 1, in <module> 
    qe = perform(entfile2) 
    File "<pyshell#119>", line 14, in perform 
    return ' '.join(repository) 
TypeError: sequence item 0: expected string, tuple found 

irgendwelche Ideen, wie die Liste schreiben ' Repository 'zu einer Datei? Vielen Dank!

+1

Sie sollten besser erklären, was ist, dass Sie zurückkehren möchten, eine Reihe von welchem ​​Format? Möchtest du später die Tupel abrufen? –

+0

soll das Repository eine Art persistenter Cache sein? –

Antwort

0

sollten Sie zuerst die Liste von Tupeln auf eine Liste von Strings Liste Verständnis umwandeln und dann danach verwenden die Join:

list_of_strings = ["(%s,%s)" % c for c in repository] 
' '.join(list_of_strings) 
+0

Danke, das hat gut funktioniert :) – rbc089

+1

@ gfar90: Wenn du genügend Antworten erhalten hast und sie ausprobiert hast, wenn du dir geholfen hast, achte darauf (indem du auf das Häkchen neben der Antwort klickst) - - das ist grundlegende SO-Etikette! -) – martineau

1

die Tupel in Strings konvertieren, bevor er sie verbinden()

ich habe neu geordnet ziemlich drastisch dies, so dass:

  1. Ihre Funktion ist nun ein Generator (weniger Speicherplatzbedarf)
  2. Das gewünschte Format wird übergeben - es gibt das Format zurück, in dem Sie es eingeben möchten
  3. Ich nehme an, dass some_variable eine berichtspflichtige Textuntermenge ist?

.

def perform(seq, tell=None, fmt=tuple): 
    """ 
    @param seq: sequence, items to be counted (string counts as sequence of char) 
    @param tell: sequence, items to report on 
    @param fmt: function(item,count) formats output 
    """ 
    # count unique items 
    fdist = nltk.FreqDist(seq) 

    if tell is None: 
     # report on all seen items 
     for item,num in fdist.iteritems(): 
      yield fmt(item,num) 
    else: 
     # report on asked-for items 
     for item in tell: 
      try: 
       yield fmt(item,fdist[item]) 
      except KeyError: 
       # tell contained an item not in seq! 
       yield fmt(item,0) 

# write to output file 
fname = 'c:/mydir/results.txt' 
with open(fname, 'w') as outf: 
    outf.write(' '.join(perform(text, some_variable, ','.join)))   
1

Falls Sie ein Wörterbuch auf dem Datenträger speichern möchten, verwenden Sie shelve:

import shelve 

def get_repository(filename='repository'): 
    # stores it's content on the disk 
    store = shelve.DbfilenameShelf(filename) 

    if not store: 
     # if it's empty fill it 
     print 'creating fdist' 
     # fdist = nltk.FreqDist(some_variable) 
     fdist = dict(hello='There') 
     store.update(fdist) 
    return store 

print get_repository() 
# creating fdist 
# {'hello': 'There'} 
print get_repository() 
# {'hello': 'There'} 
Verwandte Themen