簡體   English   中英

Python - 解碼超過限制的 Base64 字符串

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

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