从Azure data L将平面文件加载到数据帧时出现问题

2024-05-20 00:55:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我编写Python将Azure数据湖中的数据加载到数据帧中进行处理。我有两种文件类型(CSV和平面文件)。CSV加载没有问题,但是平面文件出错了。你知道吗

我知道这是文件格式的问题。它给出了一个类型错误:需要一个类似字节的对象,而不是“str”

我不知道如何转换文件使其正常工作。我尝试了编码和解码,但遇到了属性错误:“AzureDLFile”对象没有属性“decode”

当我在我的C:\驱动器上本地测试脚本时,它工作正常,所以我怀疑来自Azure的文件是不同的。有人知道如何转换文件以便我把它带进来吗?你知道吗

import numpy as np
import pandas as pd
import datetime
import os

from azure.datalake.store import core, lib, multithread

USERNAME = "xxxx"
PASSWORD = "xxxx"
TENANT_ID = "xxxx"
STORE_NAME = "xxxx"

token = lib.auth(TENANT_ID, USERNAME, PASSWORD)
adl = core.AzureDLFileSystem(token, store_name=STORE_NAME)

#EXAMPLE 1 - OPENING A CSV FILE INTO A DATA FRAME - WORKS FINE
f = adl.open('/path/filename1.txt')
df = pd.read_csv(f,dtype=str, sep='|')
df[:3]

#EXAMPLE 2 - OPENING A FLAT FIXED WIDTH FILE INTO A DATA FRAME - DOES NOT WORK
f1 = adl.open('/path/filename2') #THIS FILE HAS NO EXTENSION
df2 = pd.read_fwf(f1)
df2[:3]

Tags: 文件csv数据对象import属性as错误
1条回答
网友
1楼 · 发布于 2024-05-20 00:55:16

关键是将数据帧转换为字符串,而不是使用str.encode编码()功能。你知道吗

试试下面这样的

adl = core.AzureDLFileSystem(token, store_name='YOUR_ADLS_STORE_NAME')
      #toke is your login token that was created by whatever ADLS login method you decided.
      #Personally I use the ServiceProvider login
df_str = df.to_csv()
**with adl.open('/path/to/file/on/adls/newfile.csv', 'wb') as f:
    f.write(str.encode(df_str))
    f.close()**

希望有帮助。你知道吗

相关问题 更多 >