ValueError: stat: слишком длинный путь для Windows на ноутбуке Jupyter при разборе запроса URL - PullRequest
0 голосов
/ 05 февраля 2020

Я пытаюсь проанализировать данные Odata своей компании, чтобы составить долю просроченных поставщиков, которые берут поля CompanyName и LateDays.

Я открыл файл и преобразовал его в строку, так как нашел действительно полезный пост о том, как URL-адреса запроса с аутентификацией, и я получил свой текст строки, содержащий весь отчет. Отчет написан на? XML, и я использую Python 3.7 в Jupyter Notebook, чтобы обработать его.

Я нашел другой пост, который запрашивает файл XML, похожий на мой, используя метод класса, но у меня выводится ошибка ValueError: stat: путь слишком длинный для Windows.

Как я могу это исправить?

Спасибо!

import requests
import pandas as pd
import numpy as np
import base64
import urllib.request

request = urllib.request.Request('https://myUrl_OData')
base64string = base64.b64encode(bytes('%s:%s' % ('Myusername', 'Mypassword'),'ascii'))
request.add_header("Authorization", "Basic %s" % base64string.decode('utf-8'))
result = urllib.request.urlopen(request)
resulttext = result.read()

text = resulttext.decode(encoding='utf-8',errors='ignore')

from xml.sax import parse
from xml.sax.handler import ContentHandler

class properties(ContentHandler):
    def __init__(self):
        self.elements = []          # stack of elements
        self.char_data = u''        # string buffer
        self.current_vendor = u'' 
        self.current_latedays = u''

    def startElement(self, name, attrs):
        if companyname == u'CompanyName':
            self.elements.append(u'CompanyName')
        if latedays == u'LateDays':
            self.elements.append(u'LateDays')

    def characters(self, chars):
        if len(self.elements) > 0 and self.elements[-1] in [u'CompanyName', u'LateDays']:
            self.char_data += chars

    def endElement(self, name):
        self.elements.pop() if len(self.elements) > 0 else None

        if companyname == u'CompanyName':
            self.current_vendor = self.char_data
            self.char_data = ''
        if latedays == u'LateDays':
            self.current_latedays = self.char_data
            self.char_data = ''

        if companyname == 'CompanyName':
            if self.current_latedays == u'LateDays':
                print('Found:', self.current_customer)

            # clear the buffers now that is finished
            self.current_year = u''
            self.current_customer = u''
            self.char_data = u''


parse(r"\\\\?\\" + text, properties())

1 Ответ

0 голосов
/ 05 февраля 2020

Ваша ошибка не связана с синтаксическим анализом XML, но связана с ограничениями вашей ОС. В ОС Windows путь к файлу не может быть длиннее ~ 260 символов ( ref ).

Попробуйте уменьшить длину вашего имени файла или уменьшить количество вложенных папок, ведущих к вашим данным.

...