Databricks中Python重构认知服务名片识别代码无输出问题排查
代码无输出问题排查
- 字段读取逻辑错误:原始代码中
FirstName、LastName不是名片根级别的字段,是嵌套在ContactNames字段的value数组下的子属性,直接调用business_card.fields.get("FirstName")永远返回None,不会写入任何数据到DataFrame。 - URL拼写错误:定义的
bcUrl中azure-ai formrecognizer路径段多了空格,正确路径应为azure-ai-formrecognizer,错误URL会直接导致识别接口请求失败。 - 接口传参错误:遍历blob时已经拼接了每个文件对应的
blob_url,但调用识别接口时传入的还是写死的bcUrl,不会实际遍历识别存储容器里的文件。 - 缩进语法错误:
for blob in container.list_blobs():代码行前多了一级无效缩进,Python会直接抛出缩进错误,循环逻辑根本不会执行。 - 输出逻辑错误:普通Python脚本环境中,最后一行单独写
df不会触发打印输出,只有Jupyter/IPython类交互环境会自动渲染最后一行变量的值,脚本运行需要主动调用print(df)才会显示结果。 - 额外兼容问题:Pandas高版本(1.4.0及以上)已经废弃
df.append()方法,运行会抛出警告,推荐用pd.concat()实现行拼接。
修正后可运行代码
import pandas as pd field_list = ["FirstName", "LastName"] df = pd.DataFrame(columns=field_list) # 修正URL拼写 bcUrl = "https://raw.githubusercontent.com/Azure/azure-sdk-for-python/master/sdk/formrecognizer/azure-ai-formrecognizer/samples/sample_forms/business_cards/business-card-english.jpg" # 修正缩进 for blob in container.list_blobs(): blob_url = container_url + "/" + blob.name # 传入当前遍历到的blob地址,而非固定的样例URL poller = form_recognizer_client.begin_recognize_business_cards_from_url(blob_url) business_cards = poller.result() print("Scanning " + blob.name + "...") for idx, business_card in enumerate(business_cards): contact_names = business_card.fields.get("ContactNames") if contact_names: # 遍历名片下的所有联系人,每个联系人存为一行 for contact_name in contact_names.value: single_df = pd.DataFrame(columns=field_list) for field in field_list: field_obj = contact_name.value.get(field) if field_obj: single_df[field] = [field_obj.value] single_df['FileName'] = blob.name # 用concat替代已废弃的append df = pd.concat([df, single_df], ignore_index=True) df = df.reset_index(drop=True) # 主动打印DataFrame print(df)
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

