首页 > 解决方案 > 读取作为 base64 接收的 CSV 文件的内容

问题描述

我正在尝试读取作为 base64 字符串接收的 csv 文件,如下所示

csvBase64Content = "R2VuIERhdGUsR2VuIFRpbWUsTGlmdGluZyBEYXRlLExpZnRpbmcgVGltZSxUZXJtaW5hbCxTdXBwbGllck5vLFN1cHBsaWVyLExpZnRpbmcgU3RhcnQgVGltZSxDdXN0b21lck5vLEN1c3RvbWVyLEJPTCBOdW1iZXIsTW92ZW1lbnQgSUQsQ29udHJhY3QsQ2FycmllciBDb2RlLENhcnJpZXIgTmFtZSxQcm9kdWN0IENvZGUsUHJvZHVjdCBEZXNjcmlwdGlvbixHcm9zcyBMaXRyZXMsU3RkIExpdHJlcyxNdCBBaXIsTXQgVmFjLE0zLERlbnNpdHksQXYgVGVtcCxBZGRpdGl2ZSBHcm9zcyxEZXN0aW5hdGlvbiBOdW1iZXIsRGVzdGluYXRpb24gTmFtZSxDYXJkIFVzZWQsRHJpdmVyLER1dHkgU3RhdHVzDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw0OjI1OjU3LCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw0OjE3OjA3LDIwMTQwNjE5NixDdXN0b21lcjEsMjY1NTgwLDQwMjUsMCw0NCxnTEVJRCwxNDEsRElFU0VMLDI3NDA1LDI3NTM2LDIzLDIzLDI3LDAuODM0Niw5LjM4LDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsNjo1MDowNiwgZHVtbXkgMiwxLGR1bW15IEZ1ZWxzIExpbWl0ZWQsNjozNjoyNiwxMDM0NTIsQ3VzdG9tZXIzLDI2NTQ4MSw5MjYsMCw0NCxnTEVJRCwyNSxVTFNHLDM1OTAxLDM2MDU5LDMwLjEsMzAuMSwzNiwwLjgzNDk3LDkuODMsMCwxLE5VTEwsLCwyDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw4OjU4OjQxLCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw4OjU0OjIwLDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDU0NDksNzI3NCwwLDQ3LFdJVCwyNSxVTFNHLDExOTk5LDEyMDM1LDEwLjEsMTAuMSwxMiwwLjgzNDk3LDExLjQyLDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsMTA6MzA6MDcsIGR1bW15IDIsMSxkdW1teSBGdWVscyBMaW1pdGVkLDEwOjI4OjE3LDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDUzMjUsNzIyNiwwLDQ3LFdJVCwxNDEsRElFU0VMLDIwMDAsMjAwMywxLjcsMS43LDIsMC44MzQ2LDEzLjcsMCwxLE5VTEwsLCwyDQo="

decrypted = b64.b64decode(csvBase64Content)
with open(decrypted) as csvFile:
   #other stuff

得到错误:

OSError: [Errno 22] Invalid argument:

标签: pythonpython-3.xaws-lambda

解决方案


这是一个适用于您的数据的答案 - 请注意我需要.decode('utf-8')它运行的方法。

import base64
import csv
import io

csvBase64Content = "R2VuIERhdGUsR2VuIFRpbWUsTGlmdGluZyBEYXRlLExpZnRpbmcgVGltZSxUZXJtaW5hbCxTdXBwbGllck5vLFN1cHBsaWVyLExpZnRpbmcgU3RhcnQgVGltZSxDdXN0b21lck5vLEN1c3RvbWVyLEJPTCBOdW1iZXIsTW92ZW1lbnQgSUQsQ29udHJhY3QsQ2FycmllciBDb2RlLENhcnJpZXIgTmFtZSxQcm9kdWN0IENvZGUsUHJvZHVjdCBEZXNjcmlwdGlvbixHcm9zcyBMaXRyZXMsU3RkIExpdHJlcyxNdCBBaXIsTXQgVmFjLE0zLERlbnNpdHksQXYgVGVtcCxBZGRpdGl2ZSBHcm9zcyxEZXN0aW5hdGlvbiBOdW1iZXIsRGVzdGluYXRpb24gTmFtZSxDYXJkIFVzZWQsRHJpdmVyLER1dHkgU3RhdHVzDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw0OjI1OjU3LCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw0OjE3OjA3LDIwMTQwNjE5NixDdXN0b21lcjEsMjY1NTgwLDQwMjUsMCw0NCxnTEVJRCwxNDEsRElFU0VMLDI3NDA1LDI3NTM2LDIzLDIzLDI3LDAuODM0Niw5LjM4LDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsNjo1MDowNiwgZHVtbXkgMiwxLGR1bW15IEZ1ZWxzIExpbWl0ZWQsNjozNjoyNiwxMDM0NTIsQ3VzdG9tZXIzLDI2NTQ4MSw5MjYsMCw0NCxnTEVJRCwyNSxVTFNHLDM1OTAxLDM2MDU5LDMwLjEsMzAuMSwzNiwwLjgzNDk3LDkuODMsMCwxLE5VTEwsLCwyDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw4OjU4OjQxLCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw4OjU0OjIwLDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDU0NDksNzI3NCwwLDQ3LFdJVCwyNSxVTFNHLDExOTk5LDEyMDM1LDEwLjEsMTAuMSwxMiwwLjgzNDk3LDExLjQyLDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsMTA6MzA6MDcsIGR1bW15IDIsMSxkdW1teSBGdWVscyBMaW1pdGVkLDEwOjI4OjE3LDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDUzMjUsNzIyNiwwLDQ3LFdJVCwxNDEsRElFU0VMLDIwMDAsMjAwMywxLjcsMS43LDIsMC44MzQ2LDEzLjcsMCwxLE5VTEwsLCwyDQo="

decrypted = base64.b64decode(csvBase64Content).decode('utf-8')
with io.StringIO(decrypted) as fp:
    reader = csv.reader(fp, delimiter=",", quotechar='"')
    for row in reader:
        print(row)

推荐阅读