Форум сайта python.su
Я заполняю структурированный массив Numpy из csv- файла. В файле не все данные, но я хочу сразу создать все необходимые мне колонки, а в те, для которых нет значений вписать 0.
Например, у меня такое регулярное выражение:
text_regular_expression =('([\\d^]{10,})' #CLIENT ID ';' '(\\d{2})' #DAY OF DEAL ';' '(\\d{2})' #MONTH OF DEAL ';' '(\\d{4})' #YEAR OF DEAL '(0)'#MY INITIAL VALUE FOR QUANTITY '(0)'#MY INITIAL VALUE FOR PRICE )
Офлайн
AlekseyPythonSuА регулярные выражения здесь при чём? Используй модуль csv для разбора файла. Формат CSV не такой простой, каким кажется. Поэтому для его разбора надо использовать специальный модуль, посвящённый ему.
Я заполняю структурированный массив Numpy из csv- файла.
AlekseyPythonSuТак надо создать массив пустой. А потом этот массив заполняется данными, полученными из csv-файла, в тех полях, в которых надо.
В файле не все данные
Отредактировано py.user.next (Ноя. 12, 2020 14:16:56)
Онлайн
py.user.next
А регулярные выражения здесь при чём? Используй модуль csv для разбора файла. Формат CSV не такой простой, каким кажется. Поэтому для его разбора надо использовать специальный модуль, посвящённый ему.
columns = [] columns.append(('CLIENT_ID', 'uint32')) columns.append(('DAY', 'uint8')) columns.append(('MONTH', 'uint8')) columns.append(('YEAR', 'uint16')) columns.append(('QUANTITY', 'uint32')) columns.append(('PRICE', 'uint32')) dtype = np.dtype(columns) data_from_file = np.fromregex(file='/home/denis/deals.csv', regexp=text_regular_expression, dtype=dtype)
Отредактировано AlekseyPythonSu (Ноя. 12, 2020 16:19:30)
Офлайн
AlekseyPythonSuПрочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.
Модулем csv не пользовался
Отредактировано py.user.next (Ноя. 12, 2020 16:22:39)
Онлайн
py.user.next
Прочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.
Вот модуль csv для того и создан, чтобы учитывать все нюансы при разборе csv-данных и безошибочно разбирать их.
Отредактировано AlekseyPythonSu (Ноя. 12, 2020 16:53:04)
Офлайн
есть такой метод заполнить массив из csv
data = np.genfromtxt('data.csv', delimiter=',', names=True)
Отредактировано xam1816 (Ноя. 12, 2020 20:59:58)
Офлайн
AlekseyPythonSuТебе ещё раз, дураку, говорят: CSV надо раскладывать по правилам CSV.
Я знаю как представлены мои данные и подобрал такой вид регулярного выражения
AlekseyPythonSuВот этот самый вопрос у тебя возник потому, что ты дурак какой-то. Причина только в этом.
Как в регулярном выражении указать, чтобы не происходил поиск значений поля в текстовой строке, а использовались наперед заданные значения (в вышеприведенном примере это 0)?
Онлайн
py.user.next
Тебе ещё раз, дураку, говорят: CSV надо раскладывать по правилам CSV.
Отредактировано AlekseyPythonSu (Ноя. 13, 2020 08:11:59)
Офлайн
xam1816Спасибо, этот метод действительно за счет параметра converters позволяет производить модификации полей во время заполнения массива. Но, к сожалению, мне не подходит:
есть такой метод заполнить массив из csv
Офлайн
> В файле не все данные, но я хочу сразу создать все необходимые мне колонки, а в те, для которых нет значений вписать 0.
Это я понял, а регулярки тебе зачем?
Офлайн