5 votes

Erreur Python (ValueError: _getfullpathname: caractère nul intégré)

Je ne sais pas comment résoudre ce problème, veuillez m'aider. J'ai essayé tout ce qui est mentionné dans le post Erreur à l'importation de matplotlib.pyplot (sur Anaconda3 pour Windows 10 Home 64-bit PC) mais sans succès. Je suis novice en python et j'apprends par moi-même, des détails spécifiques seraient grandement appréciés.

Console:

 Traceback (most recent call last):
     from matplotlib import pyplot
   File "C:\Users\...\lib\site-packages\matplotlib\pyplot.py", line 29, in 
     import matplotlib.colorbar
   File "C:\Users\...\lib\site-packages\matplotlib\colorbar.py", line 34, in 
     import matplotlib.collections as collections
   File "C:\Users\...\lib\site-packages\matplotlib\collections.py", line 27, in 
     import matplotlib.backend_bases as backend_bases
   File "C:\Users\...\lib\site-packages\matplotlib\backend_bases.py", line 62, in 
     import matplotlib.textpath as textpath
   File "C:\Users\...\lib\site-packages\matplotlib\textpath.py", line 15, in 
     import matplotlib.font_manager as font_manager
   File "C:\Users\...\lib\site-packages\matplotlib\font_manager.py", line 1421, in 
     _rebuild()
   File "C:\Users\...\lib\site-packages\matplotlib\font_manager.py", line 1406, in _rebuild
     fontManager = FontManager()
   File "C:\Users\...\lib\site-packages\matplotlib\font_manager.py", line 1044, in __init__
     self.ttffiles = findSystemFonts(paths) + findSystemFonts()
   File "C:\Users\...\lib\site-packages\matplotlib\font_manager.py", line 313, in findSystemFonts
     for f in win32InstalledFonts(fontdir):
   File "C:\Users\...\lib\site-packages\matplotlib\font_manager.py", line 231, in win32InstalledFonts
     direc = os.path.abspath(direc).lower()
   File "C:\Users\...\lib\ntpath.py", line 535, in abspath
     path = _getfullpathname(path)
 ValueError: _getfullpathname: embedded null character

Python:

importation de bibliothèques
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#importation du jeu de données
dataset = pd.read_csv('Position_Salaries.csv')
x = dataset.iloc[:,1:2].values
y = dataset.iloc[:,2].values

#Régression linéaire
from sklearn.linear_model import LinearRegression
reg_lin = LinearRegression()
reg_lin = reg_lin.fit(x,y)

#Régression Linéaire Polynomiale
from sklearn.preprocessing import PolynomialFeatures
reg_poly = PolynomialFeatures(degree = 3)
x_poly = reg_poly.fit_transform(x)
reg_poly.fit(x_poly,y)
lin_reg_2 = LinearRegression()
lin_reg_2.fit(x_poly,y)

#Visualisation des résultats de la Régression Linéaire
plt.scatter(x,y,color = 'red')
plt.plot(x,reg_lin.predict(x), color = 'blue')
plt.title('Réel vs. Faux (Régression Linéaire)')
plt.xlabel('Niveau du poste')
plt.ylabel('Salaire')
plt.show()

#Visualisation des résultats de la Régression Polynomiale
plt.scatter(x,y,color = 'red')
plt.plot(x,lin_reg_2.predict(reg_poly.fit_transform(x)), color = 'blue')
plt.title('Réel vs. Faux (Régression Linéaire)')
plt.xlabel('Niveau du poste')
plt.ylabel('Salaire')
plt.show()

2voto

beango Points 28

Pour le trouver dans font_manager py:

direc = os.path.abspath(direc).lower()

le changer en:

direc = direc.split('\0', 1)[0]

et enregistrer pour l'appliquer dans votre fichier.

0voto

Franck Dernoncourt Points 4769

Je ne pense pas que vous avez appliqué le correctif dans Erreur à l'importation de matplotlib.pyplot (sur Anaconda3 pour Windows 10 Home 64-bit PC) correctement : si vous l'aviez fait, il ne devrait pas y avoir de mention de direc = os.path.abspath(direc).lower() dans votre pile d'erreurs, car le correctif l'a supprimé.

Pour être clair, voici l'intégralité de la méthode win32InstalledFonts() dans C:\Anaconda\envs\py35\Lib\site-packages\matplotlib\font_manager.py (ou où que soit installé Anaconda) après l'application du correctif, avec matplotlib 2.0.0 :

def win32InstalledFonts(directory=None, fontext='ttf'):
    """
    Recherche de polices dans le répertoire de polices spécifié, ou utilise les
    répertoires système s'il n'y en a pas. Une liste de noms de fichiers de polices
    TrueType est renvoyée par défaut, ou des polices AFM si *fontext* ==
    'afm'.
    """

    from six.moves import winreg
    if directory is None:
        directory = win32FontDirectory()

    fontext = get_fontext_synonyms(fontext)

    key, items = None, {}
    for fontdir in MSFontDirectories:
        try:
            local = winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, fontdir)
        except OSError:
            continue

        if not local:
            return list_fonts(directory, fontext)
        try:
            for j in range(winreg.QueryInfoKey(local)[1]):
                try:
                    ''' Correctif pour [Erreur à l'importation de matplotlib.pyplot (sur Anaconda3 pour Windows 10 Home 64-bit PC)](https://stackoverflow.com/a/34007642/395857)
                    key, direc, any = winreg.EnumValue( local, j)
                    if not is_string_like(direc):
                        continue
                    if not os.path.dirname(direc):
                        direc = os.path.join(directory, direc)
                    direc = os.path.abspath(direc).lower()
                    '''
                    key, direc, any = winreg.EnumValue( local, j)
                    if not is_string_like(direc):
                        continue
                    if not os.path.dirname(direc):
                        direc = os.path.join(directory, direc)
                    direc = direc.split('\0', 1)[0]

                    if os.path.splitext(direc)[1][1:] in fontext:
                        items[direc] = 1
                except EnvironmentError:
                    continue
                except WindowsError:
                    continue
                except MemoryError:
                    continue
            return list(six.iterkeys(items))
        finally:
            winreg.CloseKey(local)
    return None

0voto

Quantium Points 316

La cause réelle du problème semble se trouver dans os.path.abspath(). Une meilleure solution pourrait consister à modifier \Lib\ntpaths.py comme détaillé dans Erreur lors de l'import de matplotlib.pyplot (sur Anaconda3 pour Windows 10 Home PC 64 bits)

Essentiellement, ajoutez un gestionnaire d'exception ValueError: à la version Windows de la fonction abspath(). Cela se situe plus bas dans la pile d'appels et pourrait vous éviter de rencontrer ce problème ailleurs.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X