TypeError: 'encoding' is an invalid keyword argument for this function
Question:
My python program has trouble opening a text file. When I use the basic open file for read, I get an ascii error. Someone helped me out by having me add an encoding parameter that works well in Idle, but when I run the program through terminal, I get this error message: “TypeError: ‘encoding’ is an invalid keyword argument for this function” How can I read this text file in to use it’s data?
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("nn")
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)
Answers:
The terminal you are trying to run this on probably uses Python 2.x as standard.
Try using the command “Python3” specifically in the terminal:
$ Python3 yourfile.py
(Tested and confirmed that 2.7 will give that error and that Python3 handles it just fine.)
+1 to The Unfun Cat for a correct answer regarding Linux etc.
For Windows users, however, calling ‘Python3’ generally won’t work. But if you’ve installed Python 3.3 (or if you’ve downloaded and installed Python Launcher for Windows), you can type:
C:scr>py -3 yourfile.py
Actually, this launcher also supports shebang syntax, so adding the following first line to your script’s file will work fairly cross-platform (the /usr/bin is ignored on Windows):
#! /usr/bin/python3
After doing that, assuming that windowspy.exe is the default handler for .py files, you can just type:
C:scr>yourfile.py
And if “.PY” is in your PATHEXT environment variable, you can just type:
C:scr>yourfile
More info:
using io.open()
instead of open
removed this error for me
eg:
import io
with io.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)
My python program has trouble opening a text file. When I use the basic open file for read, I get an ascii error. Someone helped me out by having me add an encoding parameter that works well in Idle, but when I run the program through terminal, I get this error message: “TypeError: ‘encoding’ is an invalid keyword argument for this function” How can I read this text file in to use it’s data?
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("nn")
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)
The terminal you are trying to run this on probably uses Python 2.x as standard.
Try using the command “Python3” specifically in the terminal:
$ Python3 yourfile.py
(Tested and confirmed that 2.7 will give that error and that Python3 handles it just fine.)
+1 to The Unfun Cat for a correct answer regarding Linux etc.
For Windows users, however, calling ‘Python3’ generally won’t work. But if you’ve installed Python 3.3 (or if you’ve downloaded and installed Python Launcher for Windows), you can type:
C:scr>py -3 yourfile.py
Actually, this launcher also supports shebang syntax, so adding the following first line to your script’s file will work fairly cross-platform (the /usr/bin is ignored on Windows):
#! /usr/bin/python3
After doing that, assuming that windowspy.exe is the default handler for .py files, you can just type:
C:scr>yourfile.py
And if “.PY” is in your PATHEXT environment variable, you can just type:
C:scr>yourfile
More info:
using io.open()
instead of open
removed this error for me
eg:
import io
with io.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)