Home > Software design >  reading file only once throughout the other functions
reading file only once throughout the other functions

Time:08-11

with open('sample.txt', 'r') as f:
    
def function1():
    file = f.readlines()
    ...code that will read the file and modify 
    
def function2():
    file = f.readlines()
    ...code that will read the file and modify 

with open('output.txt', 'w') as outputFile:    
    for file in file:
        function1()
        function2()

Here is my code. I am trying to read the file only once. I have functions that will read different parts from the file and write it as in output.txt file. I tried but it is giving me an error "ValueError: I/O operation on closed file."

helpp

CodePudding user response:

If you're reading all of the file in each function, you're better off doing something like the following:

with open('sample.txt','r') as f:
    file = f.readlines()
    function1(file)                   # so don't readline multiple times
    function2(file)                   # in your function just operate on data
with open('output.txt', 'w') as f:
    f.writelines(file)

CodePudding user response:

Firstly, some notes:

The for file in file piece means "For each line in the file I will do the following".

Your 2 functions are not indented (I think) so that could cause an issue also.

f.readlines() takes the whole file and stores it as the variable named file.

The best approach to this would be to read the file 1 time with file = f.readlines(). Now that file has all the lines, loop over those lines while making any changes that you need to make. For each line, save that line to a new file (look up how append works).

Right now you aren't printing anything out which makes debugging very hard when you are new, so start with this:

def my_change_text_function(line):
    #here you can write code that will have the 1 line available to change.
    changed_line = ......
    return changed_line

f = open("pok.txt")
newfile = open("newfile.txt", "a")
file = f.readlines()
for line in file:
    print(line)
    changed_line = my_change_text_function(line)
    #Do your changes to the line here, character replacement, etc.
    newfile.write(changed_line)


Now you will have a new file named newfile.txt that contains your changes. This is all of the code required, minus the code you need to modify the line.

  • Related