OSError: [Errno 63] File name too long in JSON FILE (python)
Question:
i have this error – OSError: [Errno 63] File name too long:
what is the best way to work around this?
import requests
import json
import codecs
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
text = response.text
data = json.load(codecs.open(text, encoding='utf8'))
print('data', data)
Answers:
You could just leave out the first 3 Bytes, which indicate the BOM:
import requests
import json
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
text = response.content[3:]
data = json.loads(text)
print(data)
More dynamically would to lookup the correct BOM and strip if off the data:
BOMS = [
codecs.BOM,
codecs.BOM_BE,
codecs.BOM_LE,
codecs.BOM_UTF8,
codecs.BOM_UTF16,
codecs.BOM_UTF16_BE,
codecs.BOM_UTF16_LE,
codecs.BOM_UTF32,
codecs.BOM_UTF32_BE,
codecs.BOM_UTF32_LE,
]
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
data = response.content
for BOM in BOMS:
if data.startswith(BOM):
data = json.loads(data[len(BOM):])
break
print(data)
Out:
{'FHRSEstablishment': {'Header': ...
codecs.open
is used to open files. You used the entirety of the website’s JSON response as that file name. requests
already knows about JSON and you can just have it do the decode for you
import requests
import json
import codecs
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
data = response.json()
print('data', data)
This is far better than making some unwarranted assumptions about how the JSON from this particular web site is encoded.
i have this error – OSError: [Errno 63] File name too long:
what is the best way to work around this?
import requests
import json
import codecs
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
text = response.text
data = json.load(codecs.open(text, encoding='utf8'))
print('data', data)
You could just leave out the first 3 Bytes, which indicate the BOM:
import requests
import json
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
text = response.content[3:]
data = json.loads(text)
print(data)
More dynamically would to lookup the correct BOM and strip if off the data:
BOMS = [
codecs.BOM,
codecs.BOM_BE,
codecs.BOM_LE,
codecs.BOM_UTF8,
codecs.BOM_UTF16,
codecs.BOM_UTF16_BE,
codecs.BOM_UTF16_LE,
codecs.BOM_UTF32,
codecs.BOM_UTF32_BE,
codecs.BOM_UTF32_LE,
]
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
data = response.content
for BOM in BOMS:
if data.startswith(BOM):
data = json.loads(data[len(BOM):])
break
print(data)
Out:
{'FHRSEstablishment': {'Header': ...
codecs.open
is used to open files. You used the entirety of the website’s JSON response as that file name. requests
already knows about JSON and you can just have it do the decode for you
import requests
import json
import codecs
url = 'https://ratings.food.gov.uk/OpenDataFiles/FHRS314en-GB.json'
response = requests.get(url)
data = response.json()
print('data', data)
This is far better than making some unwarranted assumptions about how the JSON from this particular web site is encoded.