2016-09-10 2 views
0

Вторая половина дня все,Для Loop не следует отступов

Я встречаюсь с каким-то странным поведением от звездного цикла ниже. Функция ниже выполняет, по существу, итерацию по входному словарю patient_features, объединяя несколько строк для создания вектора стиля SVMLight. Затем этот вектор предназначен для записи в файл результатов. Однако по какой-либо причине записи в конце функции вызываются для каждой итерации выделенного цикла, что приводит к массивному размеру файла (и некоторым другим более мелким проблемам). Любая помощь в отношении того, что может быть причиной этого, будет весьма признательна.

def save_svmlight(patient_features, mortality, op_file, op_deliverable): 

    deliverable1 = open(op_file, 'wb') # feature without patient id 
    deliverable2 = open(op_deliverable, 'wb') # features with patient id 
    d1_line = '' 
    d2_line = '' 
    count = 0 # VALUE TO TEST IF INCREMENTING 
    print count 
    for patient_id in patient_features: #********** 
     value_tuple_list = patient_features[patient_id] 
     value_tuple_list.sort() 
     d2_line += str(int(patient_id)) + ' ' 
     if patient_id in mortality: 
      d1_line += str(1) + ' ' 
      d2_line += str(1) + ' ' 
     else: 
      d1_line += str(0) + ' ' 
      d2_line += str(0) + ' ' 
     for value_tuple in value_tuple_list: 
      d1_line += str(int(value_tuple[0])) + ":" + str("{:1.6f}".format(value_tuple[1])) + ' ' 
      d2_line += str(int(value_tuple[0])) + ":" + str("{:1.6f}".format(value_tuple[1])) + ' ' 


    count += 1 
    print count # VALUE INCREMENTS WHEN IT SHOULD NOT 
    deliverable1.write(d1_line); # <- BEING WRITTEN TO EACH LOOP :(
    deliverable2.write(d2_line); # <- BEING WRITTEN TO EACH LOOP :(
+2

Вы смешиваете вкладки и пробелы. Не делай этого. Python думает, что tab = 8 пробелов – inspectorG4dget

+0

Пройдя через все, заменив все вкладки четырьмя пробелами, проблема разрешилась сама. Я не могу поблагодарить вас достаточно, учитывая, что я потратил ~ 4 часа, думая, что что-то еще не так. С тех пор я ничего не делал в Python, забыл, как это могло быть. – mongolol

+0

Некоторые текстовые редакторы имеют настройку, в которой вы можете отключить вкладки, чтобы избежать этого. – Bill

ответ

0

Проблема заключается в использовании как отступов, так и вкладок в коде. Python не является вентилятором, если вы смешиваете два:/

Для справки в будущем, если вы используете Sublime Text, выделите весь текст, а на панели инструментов сверху перейдите к View > Indentation > Convert Tabs to Spaces, и проблема будет решена.

Думал, что я бы сэкономил вам, чтобы вручную искать каждую вкладку и заменять ее :)

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