adrCoder
adrCoder

Reputation: 3275

TypeError when trying to open file

I wrote the following Python code:

# code that reads the file line by line
def read_the_file(file_to_read):
    f = open('test.nml','r')
    line = f.readline()
    print("1. Line is : ", line)
    if '<?xml version="1.0"' in line:
        next_line = f.readline()
        print("2. Next line is : ", next_line)
        write_f = open('myfile', 'w')
        while '</doc>' not in next_line:
            write_f.write(next_line)
            next_line = f.readline()
            print("3. Next line is : ", next_line)
        write_f.close()
    return write_f

# code that processes the xml file
def process_the_xml_file(file_to_process):
    print("5. File to process is : ", file_to_process)
    file = open(file_to_process, 'r')
    lines=file.readlines()
    print(lines) 
    file.close()


# calling the code to read the file and process the xml
path_to_file='test.nml'   
write_f=read_the_file(path_to_file)   
print("4. Write f is : ", write_f) 
process_the_xml_file(write_f)

which basically attempts to first write and then read a file. The code gives the following error:

TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper

Any ideas what I am doing wrong and how to fix it? Thanks.

Upvotes: 1

Views: 5893

Answers (2)

Osiris92
Osiris92

Reputation: 191

Replace return write_f in read_the_file to return write_f.name.

write_f is the file handler object, you need to pass the name of the file to process_the_xml_file, not the file handler object.

Upvotes: 0

Ajurna
Ajurna

Reputation: 561

The problem here is that you are using a closed file handle and not a string in the process_the_xml_file method.

read_the_file returns a file handle and not the name of the file.

Upvotes: 1

Related Questions