2012-09-22 15 views
9

Mój program python ma problem z otwarciem pliku tekstowego. Kiedy używam podstawowego otwartego pliku do odczytu, pojawia się błąd ascii. Ktoś mi pomógł, dodając mi parametr kodowania, który działa dobrze w trybie bezczynności, ale kiedy uruchamiam program za pośrednictwem terminala, pojawia się następujący komunikat o błędzie: "TypeError:" encoding "jest nieprawidłowym argumentem słowa kluczowego dla tej funkcji" Jak mogę odczytać ten plik tekstowy, aby użyć jego danych?TypeError: 'encoding' jest nieprawidłowym argumentem słowa kluczowego dla tej funkcji

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) 

Odpowiedz

12

Terminal próbujesz uruchomić to na prawdopodobnie używa Pythona 2.x jako standard.

Spróbuj użyć polecenia "Python3" specyficznie w terminalu:

$ Python3 yourfile.py

3

+1 (Testowane i potwierdził, że 2,7 dadzą ten błąd i że Python3 obsługuje go dobrze.) do The Unfun Cat, aby uzyskać poprawną odpowiedź dotyczącą systemu Linux, itp.

Dla użytkowników systemu Windows wywoływanie "Python3" z reguły nie działa. Ale jeśli już zainstalowany Python 3.3 (lub jeśli już pobrane i zainstalowane Pythona Launcher dla Windows), można wpisać:

C:\scr>py -3 yourfile.py 

Właściwie to wyrzutnia obsługuje również składnię shebang, więc dodanie następującego pierwszej linii plik skryptu będzie działać dość cross-platform (/ usr/bin jest ignorowana w systemie Windows):

#! /usr/bin/python3 

Po wykonaniu tej czynności, przy założeniu, że windows \ py.exe jest teleskopowa domyślny dla plików .py, można po prostu wpisz:

C:\scr>yourfile.py 

A jeśli ".py" jest w zmiennej środowiskowej PATHEXT, można po prostu wpisać:

C:\scr>yourfile 

Więcej informacji:

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

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

Powiązane problemy