![](/img/trans.png)
[英]Why does decoding base64 string on the form “b'…'” (with the b prefix from Python bytes object) gives unexpected results?
[英]Decoding bytes CSV results in string with 'b' prefix
我正在使用 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))
使用請求時需要附加到注釋時的編碼,因為它默認為 latin-1 並且請求需要 utf-8。
生成的 csv 包含 1 列,其中行如下:b'Presicely'
有道理,編碼為 utf-8 將字符串轉換為字節類型。
現在我稍后嘗試解碼 csv 我有以下內容:
import requests
data = requests.get('http://destination.csv').content
testdata = data.decode('utf-8').splitlines()
print(testdata[2])
b'正好'
如果我不解碼:
print(data[1:20])
b'正好'\r\n
正如大多數stackoverflow答案所暗示的那樣,我的印象是解碼數據會消除 b 前綴。 問題可能與我最初上傳 csv 的方式有關,所以我嘗試了幾種不同的方法但沒有運氣(無法繞過編碼)。
有什么建議么?
PS python 3.7.7版
編輯:我最終沒有運氣試圖讓它工作。 DataFrame.to_csv() 返回一個字符串,正如 lenz 指出的那樣,轉換為字符串類型可能是問題的罪魁禍首。
最終,我將數據保存為 a.txt 以消除調用 to_csv() 的需要,這導致我的解碼按預期工作,證實了我們的懷疑。 txt 文件格式適用於我,所以我保持這種方式。
我能夠讓它發揮作用,這要歸功於我的朋友,他通過解決方案讓我避而遠之。 這很簡單,我需要做的是對來自 to_csv function 的結果字符串進行編碼,如下所示:
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)
我確定您可以通過將編碼組合到 to_csv function 作為標志或將其應用於結果來壓縮上述代碼。
上傳的結果文件現在可以正確解碼,您可以保留 csv 格式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.