[英]Python - Decode Base64 string that is longer than the limit
為了上傳大型 csv 文件,我實現了一個系統,該系統將文件拆分成更小的塊,對這些塊進行編碼並發送到后端。 On the backend (PHP), I append all the base64 encoded data to a single file as I had planned to decode it all in python using a shell script.
這對小文件很有用,但是一旦我到達超過一定限制的文件(在我的情況下為 100mb),我就無法解碼整個文件。 這是我的代碼
def getDataFrameFromFile():
# Read file in - which will be in base64url
contents = ""
with open(PATH + FILE_NAME) as f:
contents = f.read()
text = b64decode(contents).decode('utf-8')
print("Length of text: ", len(contents))
# Create pandas Dataframe, first column is time, second is raw
DATA = StringIO(text)
df = pd.read_csv(DATA, sep=',')
return df
這是我從print
語句中得到的 output: Length of text: 69905200
。 我相信這對於 function b64decode
來說太大了,無法一次處理。
有沒有辦法可以將 base64 拆分成更小的塊,對它們進行解碼,然后在最后加入數據?
我在某處讀到,您可以將 base64 拆分為字符串長度為mod 3 = 0
的字符串。 這是真的嗎,如果是這樣,我該怎么做?
我在某處讀到,您可以將 base64 拆分為字符串長度為 mod 3 = 0 的字符串。這是真的嗎,如果是這樣,我該怎么做?
這確實是真的(了解 base64 編碼的工作方式,如果您想知道,一點數學就會告訴您原因)。 您可以做的一件非常簡單的事情是將字符串拆分為可除以 3 長度的片段,您知道您可以解碼、解碼片段,然后將它們連接起來。 我將選擇 15 作為我的片段長度(您可能想要選擇一個更大的數字,它可以被 3 整除)。 所以,也許:
PIECESIZE=15
text = ''
while(len(contents) > 0):
text += b64decode(contents[:PIECESIZE])
contents = contents[PIECESIZE:]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.