回复:
这很容易。 Im Folgenden wird dies an einem Beispiel gezeigt.
准备
要使用 Python 向荷载查询工具发送网络请求,您需要:
- 用于编写脚本的编辑器或 IDE(集成开发环境)
- Python - python.org
- Python 库请求
- Python 库 Pandas (选填)
在对 Geo-Zone Tool 进行网页请求时,您需要提供有关 Geo-Zone Tool 的信息。 在以下文章中以查询 URL 结构为例进行说明:
→
控制网络服务(API)
在本示例中使用以下信息,您必须在脚本中替换您的信息:
- 语言: en(德语)
- 登录: john [email protected]
- 散列线: 123456ABCD
- 地图: wind-DIN-EN-1991-1-4(按照附录 EC1 的风荷载)
- 培训地点: Dlubal, Tiefenbach(Dlubal GmbH 总部)
- 位置: 49.4353975, 12.5894907 (纬度、经度)
进行网络请求并读取数据
以下脚本查询 Geo-Zone Tool 的网络服务,并记录所需的时间和内容。
...
#%% 进口
# 用于读取时间标记的库(标准库,可选)
将日期时间导入为 dt
# 通过网络请求执行库
导入申请
#%% 设置参数
# URL 网络服务荷载查询工具
https://external-crm.dlubal.com/loadzones/data.aspx'
# 查询参数(替换为您自己的值)
parz = {
'语言': 'zh'
'登录': '[email protected]',
' 散列': '123456ABCD',
'地图': 'wind-DIN-EN-1991-1-4'
'地点': 'Dlubal 蒂芬巴赫',
'项目': '49.4353975,12.5894907'
}
# 设置取消请求的时间
reto=10 #p
执行 #%% 查询
# 检索前的时间戳
cdt1 = dt.日期时间.现在 ()
# 使用Requests进行网络查询
rgz = requests.get(URLGZ, params=pargz, timeout=reto)
# 检索后的时间戳
cdt2 = dt.日期时间.现在 ()
# 查询持续时间(秒)
dur=(cdt2-cdt1).total_seconds()
# 请求的 HTTP 状态代码
sgz=rgz.status_code
# 查询内容
hgz=rgz.headers['Content-Type']
# 文本形式的网页请求内容
tgz = rgz.文本
#%% Web请求的控制台输出
txt=[]
txt.append(f"时间: {cdt1}") #时间 YYYY-MM-DD HH:MM:SS.SSSSSS
txt.append(f"运行时长: {dur} s") #查询持续时间
txt.append(f"状态码: {rgz.status_code}")), #HTTP 状态码(正常: 200)
txt.append(f"文件标题: {hgz}"), #内容说明(正常: text/html;字符集= utf-8的)
txt.append(f"Text output of request:\n{tgz}") #Geo-Zone Tool 的输出
打印('\n'.join(txt))
...
例如,
时间: 2024-08-22 13:24:32.727006
时长: 2,214527
状态代码: 200
页眉: text/html; charset=utf-8
授权文本:
结果 1、结果 2、分区、纬度、经度、海拔、街道、邮政编码、城市、规范、Annex、备注、法律声明
22.5 m/s,0.32 kN/m2,1,49.4353975,12.5894907,520.69384765625,Am Zellweg 2,93464,Tiefenbach,EN 1991-1-4,DIN EN 1991-1-4
增加:准备网络请求内容
以下脚本将从 Geo-Zone Tool 网络服务获得的文本转换为表格形式。 此外,结果数值与其单位分开,并分别保存为 CSV 和 Excel 文件。
...
#%% 进口
# 用于导入和导出的标准库中的字符串函数
来自 io import Stringio
# 数据处理库
将 pandas 导入为 pd
#%% 函数
的 rsep_val_unit(indf, cnstart='结果',):
''
单独的 Dlubal 荷载查询工具请求 Dataframe 列,结果按值和单位排列。
参数
----------
indf pandas.DataFrame
输入数据。
开始: 字符串,可选
结果所在列名称开头的标识符
退货
-------
outdf: pandas.DataFrame
输出数据。
''
tmp2 = indf.loc(axis=1)[indf.columns.str.startswith(cnstart)]
tmp3 = pd.DataFrame()
对于 tmp2.columns 中的 i:
tmp3{%|(i, 'value'), (i, 'unit')]] = tmp2[i].str.split(
' ',n=1,展开=真)
outdf = pd.concat(
[tmp3, indf.loc(axis=1)[~indf.columns.str.startswith(cnstart)]], axis=1)
返回outdf
#%% 转换
# 将 Geo-Zone Tool 的输出转换为 "表格" 数据框
dfgz=pd.read_csv(String10(rgz.text))
# 结果按值和单位分隔的DataFrame
dfgz_rs=rsep_val_unit(dfgz)
#%% 节省
# CSV 文件
dfgz_rs.to_csv("Dlubal_ULS_request.csv")
# Excel 文件格式
dfgz_rs.to_excel("Dlubal_ULS_request.xlsx")
#%% 转换的控制台输出
Print(f"原始Dataframe:\n{dfgz.to_string()}")
Print(f"操作的数据框:\n{dfgz_rs.to_string()}")
Print("示例输出:\n"
+ f"第一个结果的值为 {dfgz_rs.iloc[0,0]}。"
+ f" (in {dfgz_rs.iloc[0,1]})")
...
例如得出以下结果:
原始数据框:
结果 1、结果 2、分区、纬度、经度、海拔、街道、邮政编码、城市 Standard Annex 备注
0 22.5 m/s 0.32 kN/m2 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN
操作数据框:
(结果 1,值) (结果 1,单位) (结果 2,值) (结果 2,单位) 分区 纬度 经度 海拔 街道 邮政编码 城市标准附录备注
0 22.5 m/s 0.32 kN/m2 1 49.435398 12.589491 520.693848 Am Zellweg 2 93464 Tiefenbach EN 1991-1-4 DIN EN 1991-1-4 NaN
输出示例:
第一个结果的值为 22.5。 (米/秒)