2014-07-16 3 views
0

Mon programme produit correctement les résultats souhaités que je les imprimer sur l'écran en utilisant la fonction print():write() prend 2 arguments de position, mais 3 ont reçu

for k in main_dic.keys(): 
    s = 0 
    print ('stem:', k) 
    print ('word forms and frequencies:') 
    for w in main_dic[k]: 
     print ('%-10s ==> %10d' % (w,word_forms[w])) 
     s += word_forms[w] 
    print ('stem total frequency:', s) 

    print ('------------------------------') 

Je veux écrire les résultats avec le format exact à un fichier texte si. J'ai essayé avec ceci:

file = codecs.open('result.txt','a','utf-8') 
for k in main_dic.keys(): 
    file.write('stem:', k) 
    file.write('\n') 
    file.write('word forms and frequencies:\n') 
    for w in main_dic[k]: 
     file.write('%-10s ==> %10d' % (w,word_forms[w])) 
     file.write('\n') 
     s += word_forms[w] 
    file.write('stem total frequency:', s) 
    file.write('\n') 
    file.write('------------------------------\n') 
file.close() 

mais je reçois l'erreur:

TypeError: write() takes 2 positional arguments but 3 were given

Répondre

3

print() prend des arguments distincts, file.write()ne le fait pas. Vous pouvez réutiliser print() à écrire à votre fichier au lieu:

with open('result.txt', 'a', encoding='utf-8') as outf: 
    for k in main_dic: 
     s = 0 
     print('stem:', k, file=outf) 
     print('word forms and frequencies:', file=outf) 
     for w in main_dic[k]: 
      print('%-10s ==> %10d' % (w,word_forms[w]), file=outf) 
      s += word_forms[w] 
     print ('stem total frequency:', s, file=outf) 
     print ('------------------------------') 

J'ai aussi utilisé le haut-open(), il n'y a pas besoin d'utiliser l'ancienne et beaucoup moins polyvalent codecs.open() en Python 3. Vous n'avez pas besoin pour appeler .keys() soit, en boucle sur le dictionnaire directement fonctionne aussi.

1
file.write('stem:', k) 

Vous êtes fournissant deux arguments à write sur cette ligne, quand il ne veut un. En revanche, print est heureux de prendre autant d'arguments que vous le souhaitez. Essayez:

file.write('stem: ' + str(k)) 
2

file.write est donné plusieurs arguments lorsque son attendait un seul argument de chaîne

file.write('stem total frequency:', s) 
           ^

L'erreur est soulevée comme 'stem total frequency:', s sont traités comme deux arguments différents. Cela peut être corrigé par concaténation

file.write('stem total frequency: '+str(s)) 
           ^
Questions connexes