我有一個 python3“類檔案物件”,它的read()方法回傳一個字串——它來自一個打開的檔案或一個從s3using流式傳輸的物件boto3。
我想在將流傳csv.DictReader遞給之前對其進行消毒,特別是因為該模塊NUL對輸入的字符進行了barfs 。
我正在處理的 CSV 檔案可能很大,所以我想進行這種“流式處理”,而不是將整個檔案/物件讀入記憶體。
如何包裝輸入物件,這樣我可以清理從回傳的每個字串read()中包含一個電話:.replace('\x00', '{NUL}')?
我認為該io庫是可以查看的地方,但是我找不到顯然可以滿足我想要的功能的東西 - 能夠攔截和轉換.read()對底層類檔案物件的每個呼叫并將包裝器傳遞給csv,而無需閱讀一下子整件事。
uj5u.com熱心網友回復:
您可以使用一個簡單的生成器函式來修復資料,然后再將其傳遞給csv.reader:
import io
import csv
def denull(line_gen):
for line in line_gen:
yield line.replace('\x00', '{NUL}')
data = io.StringIO("""
hello;world
asdf;h\x00pla
""".strip())
for row in csv.reader(denull(data), delimiter=";"):
print(row)
列印出來
['hello', 'world']
['asdf', 'h{NUL}pla']
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/349652.html
