I’m trying to write a code that will read a file and make some manipulations on it.
the code:
def assem(file):
import myParser
from myParser import Parser
import code
import symboleTable
from symboleTable import SymboleTable
newFile = "Prog.hack"
output = open(newFile, 'w')
input = open(file, 'r')
prsr=Parser(input)
while prsr.hasMoreCommands():
str = "BLANK"
if(parser.commandType() == Parser.C_COMMAND):
str="111"+code.comp(prsr.comp())+code.dest(prsr.dest())+code.jump(prsr.jump())+"\n"
output.write(str)
prsr.advance()
the error i get:
Traceback (most recent call last):
File "assembler.py", line 11, in <module>
input = open(file, 'r')
TypeError: coercing to Unicode: need string or buffer, type found
how i run the program:
python assembler.py Add.asm
where Add.asm id the file i want to read, all modules are in the same library, including the .asm file.
You have multiple problems.
Firstly, your indentation is inconsistent. That means that the imports are considered as part of the
assemfunction, but nothing else is. Literally the first thing that you have to know about Python is that indentation is significant.Secondly, you’re using a built-in function name,
file, for the name of your variable. Don’t do that.Thirdly, you don’t actually call the
assemfunction. But because of your first problem, the first unindented lines are executed on startup. So when the lineinput = open(file, 'r')is reached,filestill refers to the built-in function, not your variable (which isn’t defined at this point).Finally, although this isn’t actually causing your problem, you don’t need to do both
import myParserandfrom myParser import Parser. Pick one.