2012-09-22 11 views
9

Mi programa python tiene problemas para abrir un archivo de texto. Cuando uso el archivo abierto básico para leer, obtengo un error de ascii. Alguien me ayudó al hacerme agregar un parámetro de codificación que funciona bien en Idle, pero cuando ejecuto el programa a través del terminal, aparece este mensaje de error: "TypeError: 'encoding' es un argumento de palabra clave no válido para esta función" ¿Cómo puedo hacerlo? ¿leer este archivo de texto para usar sus datos?TypeError: 'codificación' es un argumento de palabra clave no válido para esta función

try: 
    import tkinter as tk 
    from tkinter import * 
except: 
    import Tkinter as tk 
    from Tkinter import * 

import time 
import sys 
import os 
import random 

flashcards = {} 


def Flashcards(key, trans, PoS): 
    if not key in flashcards: 
     flashcards[key] = [[trans], [PoS]] 
    else: 
     x = [] 
     for item in flashcards[key][0]: 
      x.append(item) 
     x.append(trans) 
     flashcards[key][0] = x 
     x = [] 
     for item in flashcards[key][1]: 
      x.append(item) 
     x.append(PoS) 
     flashcards[key][1] = x 


def ImportGaeilge(): 
    flashcards = {} 
    with open('gaeilge_flashcard_mode.txt','r', encoding='utf8') as file: 
     for line in file: 
      line1 = line.rstrip().split("=") 
      key = line1[0] 
      trans = line1[1] 
      PoS = line1[2] 
      Flashcards(key, trans, PoS) 

def Gaeilge(): 
    numberCorrect = 0 
    totalCards = 0 
    ImportGaeilge() 
    wrongCards = {} 
    x = input('Hit "ENTER" to begin. (Type "quit" to quit)') 
    while x != quit: 
     os.system('cls') 
     time.sleep(1.3) 
     card = flashcards.popitem() 
     if card == "": 
## WRONG CARDS 
      print ("Deck one complete.") 
      Gaeilge() 
     print("\n\n") 
     print(str(card[0])+":") 
     x = input("\t:") 
     if x == 'quit': 
      break 
     else: 
      right = False 
      for item in card[1]: 
       if x == card[1]: 
        right = True 
        print("\nCorrect!") 
        numberCorrect += 1 
      if right == False: 
       print(card[0]) 

     totalCards += 1 
     print("Correct answers:", str(numberCorrect) +"/"+str(totalCards)) 


Gaeilge() 

gaeilge_flashcard_mode.txt:

I=mé=(pron) (emphatic) 
I=mise=(n/a) 
you=tú=(pron) (subject) 
you=tusa=(emphatic) 
y'all=sibh=(plural) 
y'all=sibhse=(emphatic) 
he=sé=(pron) 
he=é=(n/a) 
he=seisean=(emphatic) 
he=eisean=(n/a) 
she=sí=(pron) 
she=í=(n/a) 
she=sise=(emphatic) 
she=ise=(emphatic) 
him=é=(pron) 
him=eisean=(emphatic) 
her=í=(pron) 
her=ise=(emphatic) 
her=a=(adj) 

Respuesta

12

El terminal que está intentando ejecutar esto en Python 2.x probablemente utiliza como estándar.

Trate de usar el comando "python3", específicamente en el terminal:

$ Python3 yourfile.py

3

+1 (probado y confirmó que 2,7 dará ese error y que python3 lo maneja muy bien.) a The Unfun Cat para una respuesta correcta con respecto a Linux, etc.

Para usuarios de Windows, sin embargo, llamar a 'Python3' generalmente no funcionará. Pero si usted ha instalado Python 3.3 (o si ha descargado e instalado el Lanzador de Python para Windows), puede escribir:

C:\scr>py -3 yourfile.py 

En realidad, este lanzador también es compatible con la sintaxis tinglado, por lo que añadir la siguiente línea a la primera archivo de secuencia de comandos funciona bastante multiplataforma (el directorio/usr/bin se ignora en windows):

#! /usr/bin/python3 

Después de hacer eso, suponiendo que windows \ py.exe es el controlador predeterminado para los archivos .py, puede simplemente escribe:

C:\scr>yourfile.py 

Y si ".PY" está en la variable de entorno PATHEXT, puede escribir simplemente:

C:\scr>yourfile 

Más información:

http://docs.python.org/3/whatsnew/3.3.html

http://www.python.org/dev/peps/pep-0397/

Cuestiones relacionadas