簡體   English   中英

解碼字節 CSV 得到帶有“b”前綴的字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM