#python
#python
Вопрос:
def Data_to_array(filename_and_path):
r = int
x, y=[],[]
data = []
line_num = 0
#call data
P = open(filename_and_path,'r')
data = P.readlines()
#Get it to ignore strings
for line in data:
line_num = 1
if line.find("[data]") >= 0:
r = (line_num 1)
# Data = P.readlines()[:r]
# print (Data)
if "Sampling Rate" in line:
SR = float(line[15:])
if "temperature=" in line:
T = float(line[12:18])
print(str("Temperature = "))
print(T)
Data = data[r:line_num]
#assign data into dataframe
df = pd.DataFrame(Data)
#rename column in data
df = df.rename(columns = {0: 'volts'})
#get it to recognise the index
df.index.name = 'Index'
#get it to recognise the data as number
df = df.astype({'volts': float})
#get index to start at 1
df.index = 1
#assign data to lists
I = df.index.to_list()
t = df['volts'].to_list()
#get it to invert data
y = [element * -1 for element in t]
#multiply by sampling rate
x = [element /(SR) for element in I]
def Plot_Data (Data_to_array):
X,Y = [],[]
#assign data to X array
X = Data_to_array.x
#assign data to Y array
Y = Data_to_array.y
#Plot graph
plt.plot(X,Y)
Это мои две функции, но при запуске этой программы она выдает следующую ошибку: AttributeError: 'function' object has no attribute 'x'
. Я не вижу, как заставить его распознавать данные, отсортированные в первой функции. Мне нужна вторая функция, потому что построение графика будет усложняться по мере продолжения этой работы.
Комментарии:
1. Локальные переменные в функции, такие как «x», «y», … здесь, исчезают, когда функция завершается. Вы должны либо использовать глобальные переменные, возвращать значения, преобразовывать функции в методы в классе с переменными экземпляра, либо аналогичные решения.
Ответ №1:
Я думаю, что проблема может быть вызвана тем, что вы забыли вернуть массив из одной функции и передать его в другую функцию.
Это упрощенный пример того, как это должно быть сделано:
def one():
array= [1,2,3,4,5]
return array
def two(array):
print(array)
array = one()
two(array)
Эта же логика возврата массива и передачи его в другую функцию может использоваться как для переменных, так и для массивов.
Ответ №2:
Я подозреваю, что вы хотите вернуть X и Y из своей функции:
def Data_to_array(filename_and_path):
r = int
x, y=[],[]
data = []
line_num = 0
#call data
P = open(filename_and_path,'r')
data = P.readlines()
#Get it to ignore strings
for line in data:
line_num = 1
if line.find("[data]") >= 0:
r = (line_num 1)
# Data = P.readlines()[:r]
# print (Data)
if "Sampling Rate" in line:
SR = float(line[15:])
if "temperature=" in line:
T = float(line[12:18])
print(str("Temperature = "))
print(T)
Data = data[r:line_num]
#assign data into dataframe
df = pd.DataFrame(Data)
#rename column in data
df = df.rename(columns = {0: 'volts'})
#get it to recognise the index
df.index.name = 'Index'
#get it to recognise the data as number
df = df.astype({'volts': float})
#get index to start at 1
df.index = 1
#assign data to lists
I = df.index.to_list()
t = df['volts'].to_list()
#get it to invert data
y = [element * -1 for element in t]
#multiply by sampling rate
x = [element /(SR) for element in I]
return x, y
def Plot_Data (filename_and_path):
#assign data to X array
X, Y = Data_to_array(filename_and_path)
#assign data to Y array
#Plot graph
plt.plot(X,Y)