read contents of CSV file received as base64

Viewed 4299

I'm trying to read the csv file received as base64 string as below

csvBase64Content = "R2VuIERhdGUsR2VuIFRpbWUsTGlmdGluZyBEYXRlLExpZnRpbmcgVGltZSxUZXJtaW5hbCxTdXBwbGllck5vLFN1cHBsaWVyLExpZnRpbmcgU3RhcnQgVGltZSxDdXN0b21lck5vLEN1c3RvbWVyLEJPTCBOdW1iZXIsTW92ZW1lbnQgSUQsQ29udHJhY3QsQ2FycmllciBDb2RlLENhcnJpZXIgTmFtZSxQcm9kdWN0IENvZGUsUHJvZHVjdCBEZXNjcmlwdGlvbixHcm9zcyBMaXRyZXMsU3RkIExpdHJlcyxNdCBBaXIsTXQgVmFjLE0zLERlbnNpdHksQXYgVGVtcCxBZGRpdGl2ZSBHcm9zcyxEZXN0aW5hdGlvbiBOdW1iZXIsRGVzdGluYXRpb24gTmFtZSxDYXJkIFVzZWQsRHJpdmVyLER1dHkgU3RhdHVzDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw0OjI1OjU3LCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw0OjE3OjA3LDIwMTQwNjE5NixDdXN0b21lcjEsMjY1NTgwLDQwMjUsMCw0NCxnTEVJRCwxNDEsRElFU0VMLDI3NDA1LDI3NTM2LDIzLDIzLDI3LDAuODM0Niw5LjM4LDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsNjo1MDowNiwgZHVtbXkgMiwxLGR1bW15IEZ1ZWxzIExpbWl0ZWQsNjozNjoyNiwxMDM0NTIsQ3VzdG9tZXIzLDI2NTQ4MSw5MjYsMCw0NCxnTEVJRCwyNSxVTFNHLDM1OTAxLDM2MDU5LDMwLjEsMzAuMSwzNiwwLjgzNDk3LDkuODMsMCwxLE5VTEwsLCwyDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw4OjU4OjQxLCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw4OjU0OjIwLDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDU0NDksNzI3NCwwLDQ3LFdJVCwyNSxVTFNHLDExOTk5LDEyMDM1LDEwLjEsMTAuMSwxMiwwLjgzNDk3LDExLjQyLDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsMTA6MzA6MDcsIGR1bW15IDIsMSxkdW1teSBGdWVscyBMaW1pdGVkLDEwOjI4OjE3LDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDUzMjUsNzIyNiwwLDQ3LFdJVCwxNDEsRElFU0VMLDIwMDAsMjAwMywxLjcsMS43LDIsMC44MzQ2LDEzLjcsMCwxLE5VTEwsLCwyDQo="

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

Getting error:

OSError: [Errno 22] Invalid argument:
3 Answers

Here's an answer that works with your data - note I needed the .decode('utf-8') method for it to run.

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)

If you want to make use of the csv module to understand the "file" contents, you can create a file-like object from the decrypted bytes:

import csv, io

data = b64.b64decode(...)
reader = csv.Reader(io.StringIO(data))
# use `reader`'s methods

You are trying to open a bunch of bytes. Just loop over what you have (as below) or use the csv module.

import base64 as b64

csvBase64Content = "R2VuIERhdGUsR2VuIFRpbWUsTGlmdGluZyBEYXRlLExpZnRpbmcgVGltZSxUZXJtaW5hbCxTdXBwbGllck5vLFN1cHBsaWVyLExpZnRpbmcgU3RhcnQgVGltZSxDdXN0b21lck5vLEN1c3RvbWVyLEJPTCBOdW1iZXIsTW92ZW1lbnQgSUQsQ29udHJhY3QsQ2FycmllciBDb2RlLENhcnJpZXIgTmFtZSxQcm9kdWN0IENvZGUsUHJvZHVjdCBEZXNjcmlwdGlvbixHcm9zcyBMaXRyZXMsU3RkIExpdHJlcyxNdCBBaXIsTXQgVmFjLE0zLERlbnNpdHksQXYgVGVtcCxBZGRpdGl2ZSBHcm9zcyxEZXN0aW5hdGlvbiBOdW1iZXIsRGVzdGluYXRpb24gTmFtZSxDYXJkIFVzZWQsRHJpdmVyLER1dHkgU3RhdHVzDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw0OjI1OjU3LCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw0OjE3OjA3LDIwMTQwNjE5NixDdXN0b21lcjEsMjY1NTgwLDQwMjUsMCw0NCxnTEVJRCwxNDEsRElFU0VMLDI3NDA1LDI3NTM2LDIzLDIzLDI3LDAuODM0Niw5LjM4LDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsNjo1MDowNiwgZHVtbXkgMiwxLGR1bW15IEZ1ZWxzIExpbWl0ZWQsNjozNjoyNiwxMDM0NTIsQ3VzdG9tZXIzLDI2NTQ4MSw5MjYsMCw0NCxnTEVJRCwyNSxVTFNHLDM1OTAxLDM2MDU5LDMwLjEsMzAuMSwzNiwwLjgzNDk3LDkuODMsMCwxLE5VTEwsLCwyDQoyNy8wNC8yMDIwLDA6MTY6MDEsMjYvMDQvMjAyMCw4OjU4OjQxLCBkdW1teSAyLDEsZHVtbXkgRnVlbHMgTGltaXRlZCw4OjU0OjIwLDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDU0NDksNzI3NCwwLDQ3LFdJVCwyNSxVTFNHLDExOTk5LDEyMDM1LDEwLjEsMTAuMSwxMiwwLjgzNDk3LDExLjQyLDAsMSxOVUxMLCwsMg0KMjcvMDQvMjAyMCwwOjE2OjAxLDI2LzA0LzIwMjAsMTA6MzA6MDcsIGR1bW15IDIsMSxkdW1teSBGdWVscyBMaW1pdGVkLDEwOjI4OjE3LDIwMTIxMTMxMSxDdXN0b21lciAoU1BPVCkgLSAyMDEyLTExLTMxMSw0MDUzMjUsNzIyNiwwLDQ3LFdJVCwxNDEsRElFU0VMLDIwMDAsMjAwMywxLjcsMS43LDIsMC44MzQ2LDEzLjcsMCwxLE5VTEwsLCwyDQo="

csv = b64.b64decode(csvBase64Content).decode('utf-8').split(',')
for v in csv:
    print(v)
Related