Моя функция возвращает только одну строку из файла вместо всех строк в файле - PullRequest
0 голосов
/ 04 июня 2019

Я написал функцию для чтения каждой строки в файле .csv для преобразования в массив.

Первые три строки моего файла

GTCAAGCATACCCCCGAGCATAGCCAGAGGCTAGTTCTACGCGGTGTAGGTGGCCGACAGCTTCGCGGCCCAAGGATGAGATCAGTAAACCCCGTTGGCAGAAATCTATGTTCATT
AGCCTGGTGCAGGTAGCGCAGCTGCTAAGGTCCCTATCGCGGTAGA
AACACTTGGTCCGACACAATTTTTTGTCTCTGCGAGTTTTGTGTGA

Код, который я написал

import re
from sklearn.preprocessing import LabelEncoder
def test(logfile):
    with open(logfile) as f:
        for line in f:
            line = line.lower()
            line = re.sub('[^acgt]', 'z', line)
            my_array = np.array(list(line))
            label_encoder = LabelEncoder()
            label_encoder.fit(np.array(['a','c','g','t','z']))
            integer_encoded = label_encoder.transform(my_array)
            onehot_encoder = OneHotEncoder(sparse=False, dtype=int, n_values=5)
            integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
            onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
            onehot_encoded = np.delete(onehot_encoded, -1, 1)
            return onehot_encoded


Он возвращает мне только первую строку в файле, а не все строки в файле.Не могли бы вы помочь мне вернуть массив для всех строк в строке

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Ваше возвращение внутри петли. Таким образом, он запускает цикл один раз и возвращает

Вам необходимо объявить переменную вне цикла и добавить к ней. Затем после цикла возвращаем заполненный массив

import re
from sklearn.preprocessing import LabelEncoder
def test(logfile):
   out_arr = [] # <-- object to hold output.
   with open(logfile) as f:
       for line in f:
           line = line.lower()
           line = re.sub('[^acgt]', 'z', line)
           my_array = np.array(list(line))
           label_encoder = LabelEncoder()
           label_encoder.fit(np.array(['a','c','g','t','z']))
           integer_encoded = label_encoder.transform(my_array)
           onehot_encoder = OneHotEncoder(sparse=False, dtype=int, n_values=5)
           integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
           onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
           onehot_encoded = np.delete(onehot_encoded, -1, 1)
           out_arr.append(onehot_encoded) # <--- append instead of return
   return out_arr # <-- now that the loop is over, return the whole array
0 голосов
/ 04 июня 2019

Следите за своими отступами.Оператор return находится внутри цикла while, это означает, что в конце первого цикла он вернется и функция завершится.Попробуйте что-то вроде этого:

import re
from sklearn.preprocessing import LabelEncoder
def test(logfile):
    with open(logfile) as f:
        for line in f:
            line = line.lower()
            line = re.sub('[^acgt]', 'z', line)
            my_array = np.array(list(line))
            label_encoder = LabelEncoder()
            label_encoder.fit(np.array(['a','c','g','t','z']))
            integer_encoded = label_encoder.transform(my_array)
            onehot_encoder = OneHotEncoder(sparse=False, dtype=int, n_values=5)
            integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
            onehot_encoded = onehot_encoder.fit_transform(integer_encoded)
            onehot_encoded = np.delete(onehot_encoded, -1, 1)
      return onehot_encoded
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...