Search code examples
pythonpycharm

Calling a func from a Python file


I have two Python files (using PyCharm). In Python file#2, I want to call a function in Python file#1.

from main import load_data_from_file

delay, wavelength, measured_trace = load_data_from_file("Sweep_0.txt")
print(delay.shape)

which main is the name of python file#1. However, when I run python file#2 (the code posted at the top), I can see that whole python file#1 is also running. Any suggestion on how I can just run print(delay. shape) without running the entire python file#1??

Here are my codes:

class import_trace:
def __init__(self,delays,wavelengths,spectra):
    self.delays = delays
    self.wavelengths = wavelengths
    self.spectra = spectra

def load_data_from_file(self, filename):

    # logging.info("Entered load_data_from_file")
    with open(filename, 'r') as data_file:
        wavelengths = []
        spectra = []
        delays = []
        for num, line in enumerate(data_file):
            if num == 0:
                # Get the 1st line, drop the 1st element, and convert it
                # to a float array.
                delays = np.array([float(stri) for stri in line.split()[1:]])
            else:
                data = [float(stri) for stri in line.split()]
                # The first column contains wavelengths.
                wavelengths.append(data[0])
                # All other columns contain intensity at that wavelength
                # vs time.
                spectra.append(np.array(data[1:]))
    logging.info("Data loaded from file has sizes (%dx%d)" % 
    (delays.size, len(wavelengths)))
    return delays, np.array(wavelengths), np.vstack(spectra)

and below I use this to get the values, however it does not work:

frog = import_trace(delays,wavelengths,spectra)
delay, wavelength, measured_trace = 
frog.load_data_from_file("Sweep_0.txt")

I got this error:

frog = import_trace(delays,wavelengths,spectra)
NameError: name 'delays' is not defined


Solution

  • You can wrap up the functions of file 1 in a class and in file 2 you can create object and can call the specific function. However if you can share the file 1's code then it would be clear. For your reference find below...

    File-1

    class A:
        def func1():
            ...
    

    File-2

    import file1 as f
    # function call
    f.A.func1()