所以我有一组来自工厂传感器的位置数据。 它从已知的经度/经度位置生成以米为单位的 x、y 和 z 信息。 我有一个函数可以转换经度/经度的距离(以米为单位(,但我需要在毕达哥拉斯函数中使用 x 和 y 数据来确定这一点。 让我尝试通过传感器提供的 JSON 数据的示例来澄清。
[
{
"id": "84eb18677194",
"name": "forklift_0001",
"areaId": "Tracking001",
"areaName": "Hall1",
"color": "#FF0000",
"coordinateSystemId": "CoordSys001",
"coordinateSystemName": null,
"covarianceMatrix": [
0.82,
-0.07,
-0.07,
0.55
],
"position": [ #this is the x,y and z data, in meters from the ref point
18.11,
33.48,
2.15
],
在该分支中,叉车沿18.11米,比参考经度/经度高33.38米。 传感器高2.15米,这是我不需要的恒定信息。 为了计算出与参考点的距离,我需要使用毕达哥拉斯,然后将该数据转换回经度/经度,以便我的分析工具可以呈现它。
我的问题是(就python而言(是我不知道如何让它将18.11和33.38视为x&y,并告诉它完全忽略2.15。这是我到目前为止所拥有的。
import math
import json
import pprint
import os
from glob import iglob
rootdir_glob = 'C:/Users/username/Desktop/test_folder**/*"' # Note the
added asterisks, use forward slash
# This will return absolute paths
file_list = [f for f in
iglob('C:/Users/username/Desktop/test_folder/13/00**/*', recursive=True)
if os.path.isfile(f)]
for f in file_list:
print('Input file: ' + f) # Replace with desired operations
with open(f, 'r') as f:
distros = json.load(f)
output_file = 'position_data_blob_14' + str(output_nr) + '.csv' #output file name may be changed
def pythagoras(a,b):
value = math.sqrt(a*a + b*b)
return value
result = pythagoras(str(distro['position'])) #I am totally stuck here :/
print(result)
这段脚本是一个更广泛的项目的一部分,该项目按机器和人员以及一天中的工作和非工作时间解析文件。
如果有人能给我一些关于如何使毕达哥拉斯部分工作的提示,我将不胜感激。 我不确定我是否应该将其定义为一个函数,但是当我输入这个时,我想知道它是否应该是一个使用x&y并忽略x的"for"循环。
所有的帮助真的非常感谢。
试试这个:
position = distro['position'] # Get the full list
result = pythagoras(position[0], position[1]) # Get the first and second element from the list
print(result)
为什么使用str()
作为函数的参数?你想做什么?
你正在将一个输入(一个数字列表(传递到一个将两个数字作为输入的函数中。对此有两种解决方案 - 要么更改传入的内容,要么更改函数。
distro['position'] = [18.11, 33.48, 2.15]
,所以对于第一个解决方案,您需要做的就是传入distro['position'][0]
并distro['position'][1]
:
result = pythagoras(distro['position'][0], distro['position'][1])
或者(在我看来更优雅(,将列表传递给函数,并让函数提取它关心的值:
result = pythagoras(distro['position'])
def pythagoras(input_triple):
a,b,c = input_triple
value = math.sqrt(a*a + b*b)
return value
我使用的解决方案是
对于 file_list 中的 F: print('输入文件: ' + f( # 替换为所需的操作
with open(f, 'r') as f:
distros = json.load(f)
output_file = '13_01' + str(output_nr) + '.csv' #output file name may be changed
with open(output_file, 'w') as text_file:
for distro in distros:
position = distro['position']
result = math.sqrt(position[0]*position[0] + position[1]*position[1]),
print((result), file=text_file)
print('Output written to file: ' + output_file)
output_nr = output_nr + 1
您是否检查了要传递的参数的数据类型?
def pythagoras(a,b):
value = math.sqrt(int(a)**2 + int(b)**2)
return value
这是在整数的情况下。