我的Java程序员将excel文件转换为二进制文件,然后将二进制文件内容发送给我。
他使用sun.misc.BASE64Encoder
和sun.misc.BASE64Decoder()
进行编码。
我需要使用python将二进制数据转换为数据框。
数据看起来像
UEsDBBQABgAIAAAAIQBi7p1oXgEAAJAEAAATAAgCW0NvbnRlbnRfVHl........
我尝试了bas64
解码器,但没有帮助。
我的代码:
import base64
with open('encoded_data.txt','rb') as d:
data=d.read()
print(data)
`UEsDBBQABgAIAAAAIQBi7p1oXgEAAJAEAAATAAgCW0NvbnRlbnRfVHl........`
decrypted=base64.b64decode(data)
print(decrypt)
'PK\x03\x04\x14\x00\x06\x00\x08\x00\x00\x00!\x00b\xee\x9dh^\x01\x00\x00\x90\x04\x00\x00\x13\x00\x08\x02[Content_Types].xml \xa2\x04\x02(\xa0\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00
请帮助我将二进制数据转换为熊猫数据框。
答案 0 :(得分:1)
您快到了。由于解密的对象是字节字符串,为什么不使用BytesIO
?
import io
import pandas as pd
toread = io.BytesIO()
toread.write(decrypted) # pass your `decrypted` string as the argument here
toread.seek(0) # reset the pointer
df = pd.read_excel(toread) # now read to dataframe
从评论中回答您的问题:如何将df转换为二进制编码的对象?
好吧,如果您想将其转换为b64编码的对象,而大熊猫将其转换为excel,则:
towrite = io.BytesIO()
df.to_excel(towrite) # write to BytesIO buffer
towrite.seek(0) # reset pointer
encoded = base64.b64encode(towrite.read()) # encoded object
要将编码后的对象写入文件(只是为了关闭循环:P):
with open("file.txt", "wb") as f:
f.write(encoded)
答案 1 :(得分:1)
您也可以使用openpyxl模块 这是修改后的代码
import base64
import io
import openpyxl
with open('encoded_data.txt','rb') as d:
data=d.read()
print(data)
decrypted=base64.b64decode(data)
print(decrypted)
xls_filelike = io.BytesIO(decoded_data)
workbook = openpyxl.load_workbook(xls_filelike)
sheet_obj = workbook.active
max_col = sheet_obj.max_column
max_row = sheet_obj.max_row
# Will print all the row values
for i in range(1, max_row +1):
for j in range(1, max_col + 1):
cell_obj = sheet_obj.cell(row = i, column = j)
print cell_obj.value,
print ",", "Inorder to seperate the cells using comma for readability
print ""