读取以 base64 形式接收的 CSV 文件的内容

Sha*_*sir 2 python python-3.x aws-lambda

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

csvBase64Content = "R2VuIERhdGUsR2VuIFRpbWUsTGlmdGluZyBEYXRlLExpZnRpbmcgVGltZSxUZXJtaW5hbCxTdXBwbGllck5vLFN1cHBsaWVyLExpZnRpbmcgU3RhcnQgVGltZSxDdXN0b21lck5vLEN1c3RvbWVyLEJPTCBOdW1iZXIsTW92ZW1lbnQgSUQsQ29udHJhY3QsQ2FycmllciBDb2RlLENhcnJpZXIgTmFtZSxQcm9kdWN0IENvZGUsUHJvZHVjdCBEZXNjcmlwdGlvbixHcm9zcyBMaXRyZXMsU3RkIExpdHJlcyxNdCBBaXIsTXQgVmFjLE0zLERlbnNpdHksQXYgVGVtcCxBZGRpdGl2ZSBHcm9zcyxEZXN0aW5hdGlvbiBOdW1iZXIsRGVzdGluYXRpb24gTmFtZSxDYXJkIFVzZWQsRHJpdmVyLER1dHkgU3RhdHVzDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw0OjI1OjU3LCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw0OjE3OjA3LDIwMTQwNjE5NixDdXN0b21lcjEsMjY1NTgwLDQwMjUsMCw0NCxnTEVJRCwxNDEsRElFU0VMLDI3NDA1LDI3NTM2LDIzLDIzLDI3LDAuODM0Niw5LjM4LDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsNjo1MDowNiwgZHVtbXkgMiwxLGR1bW15IEZ1ZWxzIExpbWl0ZWQsNjozNjoyNiwxMDM0NTIsQ3VzdG9tZXIzLDI2NTQ4MSw5MjYsMCw0NCxnTEVJRCwyNSxVTFNHLDM1OTAxLDM2MDU5LDMwLjEsMzAuMSwzNiwwLjgzNDk3LDkuODMsMCwxLE5VTEwsLCwyDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw4OjU4OjQxLCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw4OjU0OjIwLDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDU0NDksNzI3NCwwLDQ3LFdJVCwyNSxVTFNHLDExOTk5LDEyMDM1LDEwLjEsMTAuMSwxMiwwLjgzNDk3LDExLjQyLDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsMTA6MzA6MDcsIGR1bW15IDIsMSxkdW1teSBGdWVscyBMaW1pdGVkLDEwOjI4OjE3LDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDUzMjUsNzIyNiwwLDQ3LFdJVCwxNDEsRElFU0VMLDIwMDAsMjAwMywxLjcsMS43LDIsMC44MzQ2LDEzLjcsMCwxLE5VTEwsLCwyDQo="

decrypted = b64.b64decode(csvBase64Content)
with open(decrypted) as csvFile:
   #other stuff
Run Code Online (Sandbox Code Playgroud)

出现错误:

OSError: [Errno 22] Invalid argument:
Run Code Online (Sandbox Code Playgroud)

Ben*_*Ben 5

这是一个适用于您的数据的答案 - 请注意,我需要.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)
Run Code Online (Sandbox Code Playgroud)