How to take input from external file in python

Hello guys! I wanna know about how can i take the input of test cases saved in the external file (‘input.txt’) and also output it to ‘output.txt’ file in python?

Please provide the full code with explanation.

1 Like

That is a great question, (that is the reason that I failed, i didn’t had prefabricated code for handling the test cases).
The solution and the explanation is posted (HERE) but it is written in C++ and is not exactly and not in a form that favors reusability.
give me few days and I will create few snippets about it.
Also here is how i am handling I/O issues:
Input:

fileForInput = open('input.in','r')
...
for N in fileForInput:

output:

fileForOutput = open('output.txt','w')
...
fileForOutput.write(answer)

But you can use the whole of my template if you think that it suits you, (HERE)

Best Regards.
Robert

1 Like

You just write simple program and then run it from command line in any platform like Windows/ Linux.

python program.py < input.txt > output.txt

<,> are redirection operators which simply redirects the stdin and stdout to input.txt and output.txt. This is the easiest way.

Alternatively, you can do the following

import sys
sys.stdin=open(‘input.txt’,‘r’)
sys.stdout=open(‘output.txt’,‘w’)

Alternatively you can do the following
input=open(‘input.txt’,‘r’)
ouput=open(‘ouput.txt’,‘w’)
n=input.read()
output.write(n)

I prefer method 1 as it is simple and no need of file handling and this helps a lot in Codejam, FaceBook HackerCup. Hope it helps

9 Likes

I was promise to write a prefabricated function that handles cases.
Here it is, I hope it helps:

#this the function that breaks the stream to cases
#this function is inspired by the DWNLD problem on codechef
#please use global i and countForDwnldN outside the function
#also use the repair function to repair the caserArray

def caser(inputFromN, inputForI):
    global countForDwnldN, dwnldK, caserArray, i
    i = inputForI
    print("caser started")
    print("i now is " + str(i))
    caserTemporalValues = ""
    caserTemporalValues = inputFromN.split()
    if int(countForDwnldN) == 0:
        print("countForDwnldN is 0")
        print("caserTemporalValues is " + str(caserTemporalValues))
        dwnldK = caserTemporalValues[0]
        print("dwnldK is " + str(dwnldK))
        countForDwnldN = caserTemporalValues[1]
        print("countForDwnldN is " + str(countForDwnldN))
        i = int(i) + 1
        caserArray.append([])
        caserArray[i - 1].append(dwnldK)
    else:
        print("countForDwnldN is NOT 0")
        print("countForDwnldN is " + str(countForDwnldN))
        print("i is " + str(i))
        caserArray[i - 1].append(caserTemporalValues)
        countForDwnldN = int(countForDwnldN) - 1
        print("caserArray is " + str(caserArray[i - 1]))
        # i = int(i) + 1



# it needs to run after the caser()
# it repairs if necessary, (and if possible), the caserArray
# it repairs caserArray by removing the empty trailer.

def caseReapairer(howManyCasesParameter):
    if len(caserArray) > int(howManyCasesParameter):
        caserArray.pop()

I have to apologize if it seems bit chaotic. It is designed to be prefabricated.
Best Regards.
Robert.

Ok @exarchias123, i will wait for the snippets.

Hello Again.
I inserted few snippets on how i am handling I/O issues with external files, and the template that I am using when I have to do with external files.
I hope it helps!
Best Regards.
Robert.

Can you make the code more concise and short ? please…

sorry. I defend my style for reasons of encapsulation and resusability.
I Apologize for any inconvenience.
Best Regards.
Robert.

1 Like

Sorry to say! I could not able to interpret your code.

Thanks Buddy! Finally got the right answer.

Input redirection is the easiest method to get ur job done and is quite handy in contests like CodeJam etc. Alternatively u can create a pipe to do the same task. So this gives 4th approach :slight_smile:

pipe? Can you explain it?

pipe is FIFO and is commonly used in Unix OS. It is used to transfer information from one sub process to another. So you can create a pipe for reading input from input file, another pipe to write output in output file and then share data among the two pipes.

2 Likes