2015-12-18 2 views
0

У меня есть простой скрипт, который пытается преобразовать файл данных csv в форму, которую может принять инструмент svm_light. Вот код:ValueError: unknown url type: 0.0 error in sklearn

import csv 
import sys 
import numpy as np 
from sklearn.cross_validation import train_test_split 

def svm_light_conversion(row): 
    conv_row = row[len(row) - 1] + ' ' 

    for i in xrange(len(row) - 1): 
     conv_row = conv_row + str(i + 1) + ':' + str(row[i]) + ' ' 

    return conv_row 

def reaData(inputfile): 

    with open(inputfile, 'r') as inFile: 
     reader = csv.reader(inFile) 
     my_content = list(reader) 

    my_content = my_content[0:len(my_content) - 1] 

    return my_content 

def converToSVMLiteFormat(outputfile, train, test): 

    train_file = outputfile + '_train.dat' 
    test_file = outputfile + '_test.dat' 
    #svm_light conversion for training data 
    with open(train_file, 'wb') as txtfile: 
     for i in xrange(len(train)): 
      converted_row = svm_light_conversion(train[i]) + '\n' 

      txtfile.write(converted_row) 

    txtfile.close() 

    #svm_light conversion for test data# 
    with open(test_file, 'wb') as txtfile: 
     for i in xrange(len(test)): 
      converted_row = svm_light_conversion(test[i]) + '\n' 

      txtfile.write(converted_row) 

    txtfile.close() 



def main(): 

    inputfile = sys.argv[1] 
    outputfile = sys.argv[2] 

    content = reaData(inputfile) 

    train, test = train_test_split(content, train_size = 0.8) #split data 
    converToSVMLiteFormat(outputfile, train, test) 



if __name__ == "__main__": 
    main() 

Он работает абсолютно нормально, но теперь вдруг его дает ошибку:

(env)[email protected]:~/new$ python prac.py data.csv outt 
Traceback (most recent call last): 
    File "prac.py", line 4, in <module> 
    from sklearn.cross_validation import train_test_split 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/sklearn/cross_validation.py", line 32, in <module> 
    from .metrics.scorer import check_scoring 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/sklearn/metrics/__init__.py", line 7, in <module> 
    from .ranking import auc 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/sklearn/metrics/ranking.py", line 30, in <module> 
    from ..utils.stats import rankdata 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/sklearn/utils/stats.py", line 2, in <module> 
    from scipy.stats import rankdata as _sp_rankdata 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/scipy/stats/__init__.py", line 338, in <module> 
    from .stats import * 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/scipy/stats/stats.py", line 189, in <module> 
    from . import distributions 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/scipy/stats/distributions.py", line 10, in <module> 
    from ._distn_infrastructure import (entropy, rv_discrete, rv_continuous, 
    File "/home/fieldsofgold/new/env/local/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py", line 44, in <module> 
    from new import instancemethod 
    File "/home/fieldsofgold/new/new.py", line 10, in <module> 
    response2 = urllib2.urlopen(row[12]) 
    File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen 
    return _opener.open(url, data, timeout) 
    File "/usr/lib/python2.7/urllib2.py", line 396, in open 
    protocol = req.get_type() 
    File "/usr/lib/python2.7/urllib2.py", line 258, in get_type 
    raise ValueError, "unknown url type: %s" % self.__original 
ValueError: unknown url type: 0.0 

Может кто-нибудь пожалуйста, помогите мне разобрать ошибку? Похоже, что ошибка происходит где-то в склеарне, но я не совсем понимаю, что может быть неправильным. Благодарю.

ответ

1

Если следовать отслеживающий, из строки в файле

from sklearn.cross_validation import train_test_split 

создать каскад импорта. Но если вы читаете позже в TRACEBACK, вы увидите это

from new import instancemethod 
    File "/home/fieldsofgold/new/new.py", line 10, in <module> 

Существует модуль где-то в Python называется new.py. Однако в вашем текущем каталоге вы также создали модуль с именем new.py. Из-за priority of imports Python сначала ищет модуль в текущем рабочем каталоге. Если он не находит его, он будет пробовать другие места, в соответствии с

>>> import sys 
>>> sys.path 

Так в основном Python импортирует неправильные new.py и это все снежки оттуда. Чтобы избежать проблемы, просто переименуйте папку new и файл new.py в другое. Кроме того, убедитесь, что вы удалили файл new.pyc, который был создан, потому что его существования достаточно, чтобы попробовать импорт оттуда.

Просто для любопытных, это содержимое файла, расположенного в .../Python27/Lib/в Windows.

"""Create new objects of various types. Deprecated. 
This module is no longer required except for backward compatibility. 
Objects of most types can now be created by calling the type object. 
""" 
from warnings import warnpy3k 
warnpy3k("The 'new' module has been removed in Python 3.0; use the 'types' " 
      "module instead.", stacklevel=2) 
del warnpy3k 

from types import ClassType as classobj 
from types import FunctionType as function 
from types import InstanceType as instance 
from types import MethodType as instancemethod 
from types import ModuleType as module 

from types import CodeType as code 
+0

Большое вам спасибо. Итак, первый приоритет относится к модулю в текущем каталоге, а не к модулю в Python? Я бы подумал, что модули в python получат первый приоритет, не должно ли это иметь больше смысла? Кроме того, спасибо за добавленную ноту, это первый случай, когда я получил такую ​​ошибку, очень интересную. – QPTR

+1

Имеет смысл импортировать из текущего каталога, так как там находится ваш проект. Единственная причина, почему я знаю о 'new.py', - это то, что я был укушен ею, как вы. Совсем неприятное имя файла, учитывая ленивость программистов, чтобы назвать их файлы. – Reti43

Смежные вопросы