Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2020 13:28:25

AlekseyPythonSu
Зарегистрирован: 2020-08-15
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

Я заполняю структурированный массив 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
                                )

Как в регулярном выражении указать, чтобы не происходил поиск значений поля в текстовой строке, а использовались наперед заданные значения (в вышеприведенном примере это 0)?

Офлайн

#2 Ноя. 12, 2020 14:16:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

AlekseyPythonSu
Я заполняю структурированный массив Numpy из csv- файла.
А регулярные выражения здесь при чём? Используй модуль csv для разбора файла. Формат CSV не такой простой, каким кажется. Поэтому для его разбора надо использовать специальный модуль, посвящённый ему.

AlekseyPythonSu
В файле не все данные
Так надо создать массив пустой. А потом этот массив заполняется данными, полученными из csv-файла, в тех полях, в которых надо.



Отредактировано py.user.next (Ноя. 12, 2020 14:16:56)

Онлайн

#3 Ноя. 12, 2020 16:10:38

AlekseyPythonSu
Зарегистрирован: 2020-08-15
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

py.user.next
А регулярные выражения здесь при чём? Используй модуль csv для разбора файла. Формат CSV не такой простой, каким кажется. Поэтому для его разбора надо использовать специальный модуль, посвящённый ему.

Я создаю структурированный numpy- массив с помощью методов, которые предоставляет модуль numpy:
 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)

Модулем csv не пользовался, но не думаю, что он будет создавать подобные специфичные массивы.

Отредактировано AlekseyPythonSu (Ноя. 12, 2020 16:19:30)

Офлайн

#4 Ноя. 12, 2020 16:21:14

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

AlekseyPythonSu
Модулем csv не пользовался
Прочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.

Вот модуль csv для того и создан, чтобы учитывать все нюансы при разборе csv-данных и безошибочно разбирать их.



Отредактировано py.user.next (Ноя. 12, 2020 16:22:39)

Онлайн

#5 Ноя. 12, 2020 16:52:01

AlekseyPythonSu
Зарегистрирован: 2020-08-15
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

py.user.next
Прочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.

Вот модуль csv для того и создан, чтобы учитывать все нюансы при разборе csv-данных и безошибочно разбирать их.

Вы умеете общаться культурно? Если да, то прошу продолжать именно в культурном стиле.

Я знаю как представлены мои данные и подобрал такой вид регулярного выражения, который работает без ошибок. Поэтому меня больше заботят не ошибки, которых никогда не будет, а создание нужного мне numpy- массива (который очень большой).

Отредактировано AlekseyPythonSu (Ноя. 12, 2020 16:53:04)

Офлайн

#6 Ноя. 12, 2020 20:59:34

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1371
Репутация: +  121  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

есть такой метод заполнить массив из csv

 data = np.genfromtxt('data.csv', delimiter=',', names=True)

Отредактировано xam1816 (Ноя. 12, 2020 20:59:58)

Офлайн

#7 Ноя. 13, 2020 01:37:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9882
Репутация: +  853  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

AlekseyPythonSu
Я знаю как представлены мои данные и подобрал такой вид регулярного выражения
Тебе ещё раз, дураку, говорят: CSV надо раскладывать по правилам CSV.

AlekseyPythonSu
Как в регулярном выражении указать, чтобы не происходил поиск значений поля в текстовой строке, а использовались наперед заданные значения (в вышеприведенном примере это 0)?
Вот этот самый вопрос у тебя возник потому, что ты дурак какой-то. Причина только в этом.

Ты вот приходишь с такой чушью. С серьёзным академическим лицом спрашиваешь, как же тебе решить эту проблему, которую ты сам же себе и смастерил, потому что ты ноль полный. Тебе начинают отвечать, как вообще программировать правильно, с чего нужно начинать, какие-то элементарные вещи, потому что то, что ты не соображаешь ни в чём, - это очевидно как дважды два. И ты ещё начинаешь спорить, думая, что никто не понимает, что ты абсолютный профан.

Мальчик, ты адресом ошибся.

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

Поэтому тебе и говорят: это CSV - его нужно модулем разобрать. Ты не суперпрофессионал, чтобы применять хаки; ты не умеешь применять хаки и хаками только всё запорешь. Не знаешь, как регулярные выражения делать, не знаешь, как там CSV устроен, - делай то, что тебе говорят.



Онлайн

#8 Ноя. 13, 2020 07:52:21

AlekseyPythonSu
Зарегистрирован: 2020-08-15
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

py.user.next
Тебе ещё раз, дураку, говорят: CSV надо раскладывать по правилам CSV.

Дурак здесь только ты, раз ведешь себя как звереныш.

Отредактировано AlekseyPythonSu (Ноя. 13, 2020 08:11:59)

Офлайн

#9 Ноя. 13, 2020 08:01:57

AlekseyPythonSu
Зарегистрирован: 2020-08-15
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

xam1816
есть такой метод заполнить массив из csv
Спасибо, этот метод действительно за счет параметра converters позволяет производить модификации полей во время заполнения массива. Но, к сожалению, мне не подходит:
1. Нет возможности отборов (т.е. он создает массив оп всем строкам), что допустимо делать в регулярных выражениях.
2. Конвертации выполняются функциями языка Python, поэтому скорее всего на больших данных это будет работать очень медленно.

Офлайн

#10 Ноя. 13, 2020 11:35:52

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2756
Репутация: +  184  -
Профиль   Отправить e-mail  

Как в регулярном выражении исползовать наперед заданный символ?

> В файле не все данные, но я хочу сразу создать все необходимые мне колонки, а в те, для которых нет значений вписать 0.

Это я понял, а регулярки тебе зачем?



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version