Python Forum

Full Version: How to call function
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,
I defined two function in a forloop, and on each iteration both function should trigger. I use below code, and I am not getting any output.

import pandas as pd
input=open(r'D:\PythonCodes\InputCSV.csv','r')
output=open(r'D:\PythonCodes\OutCSV.csv','w',newline="")

lst_file_smry=['InputCSV','InputCSV2']
in_dir='D:\\Mekala_Backupdata\PythonCodes'
out_dir='D:\\Mekala_Backupdata\PythonCodes'

file_name=in_dir+"\\"+lst_file_smry[1]
len_file_lst=len(lst_file_smry)
for i in range(len(lst_file_smry)):
    input_file= in_dir+"\\"+lst_file_smry[i]+".csv"
    output_file=out_dir+"\\"+lst_file_smry[i]+"out.csv"
    print("infile:",input_file)
    print("outfile:",output_file)
    def readxl():
        f= pd.read_csv(input_file)
    if __name__== "__main__":
        readxl()
    def write2csv():
        f.to_csv(output_file)
    if __name__== "__main__":
        write2csv()
error:

NameError: name 'f' is not defined
may be my function definition or function calling is bad.
Variables defined in a function are only available inside that function. You need to return the value from readxl with a return statement, and then pass it to write2csv with a parameter. See the function tutorial on how to do that. Additionally, if you defined both of those functions to take parameters for the file paths, you could define them once rather than redefining them every time you go through the loop.

Also, you use of if __name__ == '__main__': is very odd. That is usually done once at the end of the program. As it is, you are running a bunch of code whether you import the code or run it as the primary program. I would put all of the code in one function, and then use a single if __name__ at the end to call that function.