Найти - Пользователи
Полная версия: Как в регулярном выражении исползовать наперед заданный символ?
Начало » Python для новичков » Как в регулярном выражении исползовать наперед заданный символ?
1 2
AlekseyPythonSu
Я заполняю структурированный массив 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)?
py.user.next
AlekseyPythonSu
Я заполняю структурированный массив Numpy из csv- файла.
А регулярные выражения здесь при чём? Используй модуль csv для разбора файла. Формат CSV не такой простой, каким кажется. Поэтому для его разбора надо использовать специальный модуль, посвящённый ему.

AlekseyPythonSu
В файле не все данные
Так надо создать массив пустой. А потом этот массив заполняется данными, полученными из csv-файла, в тех полях, в которых надо.
AlekseyPythonSu
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 не пользовался, но не думаю, что он будет создавать подобные специфичные массивы.
py.user.next
AlekseyPythonSu
Модулем csv не пользовался
Прочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.

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

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

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

Я знаю как представлены мои данные и подобрал такой вид регулярного выражения, который работает без ошибок. Поэтому меня больше заботят не ошибки, которых никогда не будет, а создание нужного мне numpy- массива (который очень большой).
xam1816
есть такой метод заполнить массив из csv
 data = np.genfromtxt('data.csv', delimiter=',', names=True)

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

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

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

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

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

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

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

Это я понял, а регулярки тебе зачем?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB