Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对CSV字节的解码结果为带';b';前缀_Python_Python 3.x_Dataframe_Csv_Utf 8 - Fatal编程技术网

Python 对CSV字节的解码结果为带';b';前缀

Python 对CSV字节的解码结果为带';b';前缀,python,python-3.x,dataframe,csv,utf-8,Python,Python 3.x,Dataframe,Csv,Utf 8,我使用的是一个csv,我使用requests.get联机获取,因此在上下文中,文件是如何上载的: import pandas as pd import requests comments = [] body = requests.get() for comment in body: comments.append([ str(body['data']['body']).encode(encoding='utf-8') ]) df

我使用的是一个csv,我使用requests.get联机获取,因此在上下文中,文件是如何上载的:

import pandas as pd
import requests

comments = []
body = requests.get()
for comment in body:
    comments.append([
                str(body['data']['body']).encode(encoding='utf-8')
            ])
df = pd.DataFrame(comments)[0]
requests.put('http://sample/desination.csv', data=df.to_csv(index=False))
在使用请求时,需要在注释后附加编码,因为它默认为拉丁语-1,请求需要utf-8

生成的csv包含1列,其中包含以下行: “总统”

有意义的是,编码为utf-8将字符串转换为字节类型

现在,在我稍后尝试解码csv的地方,我有以下内容:

import requests

data = requests.get('http://destination.csv').content
testdata = data.decode('utf-8').splitlines()
print(testdata[2])
“总统”

如果我不解码:

print(data[1:20])
b'Presicely'\r\n

我的印象是,解码数据将消除b前缀,正如大多数stackoverflow答案所示。问题可能在于我最初如何上传csv,所以我尝试了几种不同的方法来解决这个问题,但运气不佳(无法绕开编码)

有什么建议吗

p.S.python版本3.7.7

编辑:我最终没有运气让它工作。DataFrame.to_csv()返回一个字符串,正如lenz指出的,转换为字符串类型可能是问题的根源


最终,我将数据保存为.txt,以消除调用_csv()的需要,这导致我的解码按预期工作,证实了我们的怀疑。txt文件格式适合我,所以我一直保持这种方式。

我能够让它工作,这要归功于我的irl朋友,他用橡皮把我从解决方案中挤了出来。这非常简单,我需要做的是将结果字符串从编码为_csv函数,如下所示:

comments = []
body = requests.get()
for comment in body:
    comments.append([
            str(body['data']['body'])
        ])
df = pd.DataFrame(comments)[0]
csv_data = df.to_csv(index=False)
csv_data = csv_data.encode('utf-8')
requests.put('http://sample/desination.csv', data=csv_data)
我相信您可以通过将encode组合为to_csv函数作为标志或将其应用于结果来压缩上述代码


上传的结果文件现在可以正确解码,您可以保留csv格式。

可能在某个地方有一个(隐式的)
str
调用,因此值实际上是
“b'precision'”
“b'precision'\r\n”
。通过序列化字节对象列表(而不是首先序列化,然后对整个转储进行编码),您可能还需要对每个单元格进行单独解码。
df.to_csv(encoding='utf-8')
?@snakecharmerb刚刚尝试了在对主体进行解码/不解码的情况下执行此操作,但结果是相同的。@lenz您说得对,to_csv返回一个str对象,这可能就是问题所在。然而,当我尝试解码整个正文时,例如:datadf=pd.read\u csv(io.StringIO(data.decode('utf-8')),我可以获取一个单元格:testdata=datadf.iloc[1,0],但该单元格已经是一个无法进一步解码的字符串。你是不是建议我把它转换成另一种类型,在每一行上进一步解码?