python - 无法在来自 blobstorage 的先前数据帧中附加新数据帧
问题描述
在 HTTP 触发之后,我想从 blob 存储中读取 .csv 文件并将新数据附加到该文件中。并希望以 .csv 格式将数据保存到 blob 存储。请帮帮我......
scriptpath=os.path.abspath(__file__)
scriptdir=os.path.dirname(scriptpath)
train=os.path.join(scriptdir,'train.csv')
train_df=pd.read_csv(train)
train_df=train_df.append(test_df)
train_df.to_csv(scriptdir+'tt.csv')
block_blob_service.create_blob_from_path(
'files',
'mytest.csv',
scriptdir+'tt.csv',
content_settings=ContentSettings(content_type='application/CSV')
)
我的问题是附加数据后,我必须将该数据保存到 blob 存储。因此,我必须将所有数据保存在 csv 文件中,但出现上述错误。Https 触发器不允许我保存 csv 文件。错误显示
Exception: PermissionError: [Errno 13] Permission denied:
'C:\\Users\\Shiva\\Desktop\\project\\loumus\\Imagetrigger'
Stack: File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.7/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 357, in _handle__invocation_request
self.__run_sync_func, invocation_id, fi.func, args)
File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\concurrent\futures\thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "C:\Program Files\Microsoft\Azure Functions Core Tools\workers\python\3.7/WINDOWS/X64\azure_functions_worker\dispatcher.py", line 542, in __run_sync_func
return func(**params)
File "C:\Users\Shiva\Desktop\project\loumus\Imagetrigger\__init__.py", line 276, in main
mm.to_csv(scriptdir,'tt.csv')
File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\core\generic.py", line 3403, in to_csv
storage_options=storage_options,
File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\formats\format.py", line 1083, in to_csv
csv_formatter.save()
File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\formats\csvs.py", line 234, in save
storage_options=self.storage_options,
File "C:\Users\Shiva\AppData\Local\Programs\Python\Python37\lib\site-packages\pandas\io\common.py", line 647, in get_handle
newline="",
解决方案
有几个问题。
- Azure Functions 在托管运行时环境中运行,您对本地存储/磁盘的访问权限与在笔记本电脑上运行时不同。不是说你没有本地磁盘。STW 和 RTM:
- 用于
tempdir
创建临时目录。这将在底层操作系统指定为临时存储的区域中创建它。 - 写入本地存储然后上传到 ADLS 没有具体原因。你可以:
- 将 csv 文件写入内存(例如
StringIO
),然后使用 SDK 将其写入str
ADLS。 - 安装适当的驱动程序(不确定您是否使用 pyspark 或 pandas 或其他东西)并直接将 Dataframe 写入 ADLS。例如看
one example
。
- 将 csv 文件写入内存(例如
推荐阅读
- reactjs - 使用 TypeScript 做出反应:如何使用先前的状态键入 useState 钩子
- .net - 即使重命名旧 DLL,也无法加载文件或程序集错误
- javascript - WebSocket 的 Google IAP 身份验证
- node.js - 将长时间运行的 Promise 与流 Nodejs 一起使用时,堆内存会爆炸
- python - 如何将 OrderedDict 转换为嵌套的 OrderedDict?
- hyperledger-fabric - 当超级账本结构 2.x 上的 sumbit 交易被同意者拒绝时出现错误:我不为通道主通道提供服务
- javascript - 使用适用于 JavaScript v3 的 AWS 开发工具包完成向 S3 的多部分上传时出现 XML 错误
- ios - 如何使用 Swift 语言创建虚拟 VPN 服务器并更改其 DNS 服务器
- python - Flask-SocketIO 运行应用程序但不触发事件
- java - Java:如何在文件锁定时推迟读/写文件