An integer is required? open()

Viewed 97872

I have a very simple python script that should scan a text file, which contains lines formatted as id='value' and put them into a dict. the python module is called chval.py and the input file is in.txt. here's the code:

import os,sys
from os import *
from sys import *

vals = {}

f = open(sys.argv[1], 'r')

for line in val_f:
    t = line.split('=')
    t[1].strip('\'')
    vals.append(t[0], t[1])

print vals

f.close()

when i try to run it i get:

Traceback (most recent call last):
File "chval.py", line 9, in ? f = open(sys.argv[1], 'r') TypeError: an integer is required

I'm using python 2.4... because i've been challenged to not use anything newer, is there something about open() that I don't know about? Why does it want an integer?

anything after that line is untested. in short: why is it giving me the error and how do i fix it?

7 Answers

Because you did from os import *, you are (accidenally) using os.open, which indeed requires an integer flag instead of a textual "r" or "w". Take out that line and you'll get past that error.

Don't do import * from wherever without a good reason (and there aren't many).

Your code is picking up the os.open() function instead of the built-in open() function. If you really want to use os.open(), do import os then call os.open(....). Whichever open you want to call, read the documentation about what arguments it requires.

Also of note is that starting with Python 2.6 the built-in function open() is now an alias for the io.open() function. It was even considered removing the built-in open() in Python 3 and requiring the usage of io.open, in order to avoid accidental namespace collisions resulting from things such as "from blah import *". In Python 2.6+ you can write (and can also consider this style to be good practice):

import io
filehandle = io.open(sys.argv[1], 'r')

Providing these parameters resolved my issue:

with open('tomorrow.txt', mode='w', encoding='UTF-8', errors='strict', buffering=1) as file:
    file.write(result)

that's because you should do:

open(sys.argv[2], "w", encoding="utf-8")

or

open(sys.argv[2], "w")

you have from os import * I also got the same error, remove that line and change it to import os and behind the os lib functions, add os.[function]

Related