TypeError: coercing to Unicode: need string or buffer, file found (open() function)

python, typeerror, unicode

Solution

You are getting this error because `open` is looking for a file name, and you're passing to it the file object itself, `j1`. If you open `j` instead for instance, you will no longer have the error.

EDIT: If you want to open a file and read specific lines, I would use something like this:

j1 = open(j, 'w')
for i, line in enumerate(j1):
    if i == 12:
        # this is the 13th line
    elif i == 312:
        # this is the 313th line
    elif i > 1000:
        break
j1.close()

Problem

I'm new to programing especially Python. I'm trying to learn it with this tutorial . I'm at exercise 19 now and one of the study drills is to create my own function of my own design and run it ten different times. I think I did well so far until the 10th run. It's my first time trying to create and write in a file and then open it again to take the numbers out and put it in the bread_and_butter variable. The error looks like this: ``` Traceback (most recent call last): File "ex19b.py", line 95, in <module> j2 = open(j1) TypeError: coercing to Unicode: need string or buffer, file found ``` ``` from sys import argv def bread_and_butter(bread, butter): print "I have %d bread(s) and %d grams butter\n" % (bread, butter) print "1. I can give it the numbers directly:" bread_and_butter(10, 15) print "2. Or I could use variables from my script:" amount_of_bread = 10 amount_of_butter = 15 bread_and_butter(amount_of_bread, amount_of_butter) print "3. We can even do math inside it:" bread_and_butter(10 + 5, 7 + 9) print "4. And we can combine both, math and variables:" bread_and_butter(amount_of_bread + 7, amount_of_butter + 9) print "5. We can let the user decide how much we have:" x = raw_input("How much bread do we have?") i = raw_input("And how much butter do we have?") y = int(x) z = int(i) bread_and_butter(y, z) print "6. Also we can take arguments for that:" script, how_much_bread, how_much_butter = argv q = int(how_much_bread) w = int(how_much_butter) bread_and_butter(q, w) print "7. Another mathematic way:\n" x1 = raw_input("How much breads do we have left?") x2 = raw_input("How much breads do we need?") y1 = raw_input("How much grams butter was left again?") y2 = raw_input("How much grams butter do we still need?") a1 = int(x1) a2 = int(x2) b1 = int(y1) b2 = int(y2) c, d = a2 - a1, b2 - b1 print "We still need %d bread(s) and %d gram butter but\n" % (c, d) bread_and_butter(a1, b1) print "8. Another way:\n" bread = 10 butter = 300 y = bread - 8 z = butter - 1000 bread_and_butter(y, z) print "9. Second last way:\n" script, bread, butters = argv f = int(bread) g = int(butters) l = f - 30 k = g - 500 bread_and_butter(l, k) print "10. The last way:\n" j = raw_input("I'll create a file with numbers in it, what's it's name?") j1 = open(j, 'w') number1 = raw_input("How many breads do we have?") number2 = raw_input("And how much butter do we have?") print "I'm going to write these to the file..." j1.write("%s\n%s\n" % (number1, number2)) j1.close() print "The filename is: %s." % j1.name j2 = open(j1) j3 = open(j1) j4 = j2.read() j5 = j3.read() j6 = int(j4) j7 = int(j5) bread_and_butter(j6, j7) ``` I'd be very glad when somebody could help me noob out here. I guess it won't be the last thing I won't understand but for now that gets me confusing. I'm sure you "pros" already get the problem when you just look at it. Anyway thanks in advance, Wumpel

Original source