Форум сайта python.su
0
Я заполняю структурированный массив 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 )
Офлайн
857
AlekseyPythonSuА регулярные выражения здесь при чём? Используй модуль csv для разбора файла. Формат CSV не такой простой, каким кажется. Поэтому для его разбора надо использовать специальный модуль, посвящённый ему.
Я заполняю структурированный массив Numpy из csv- файла.
AlekseyPythonSuТак надо создать массив пустой. А потом этот массив заполняется данными, полученными из csv-файла, в тех полях, в которых надо.
В файле не все данные
Отредактировано py.user.next (Ноя. 12, 2020 14:16:56)
Офлайн
0
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)
Офлайн
857
AlekseyPythonSuПрочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.
Модулем csv не пользовался
Отредактировано py.user.next (Ноя. 12, 2020 16:22:39)
Офлайн
0
py.user.next
Прочитай, что такое формат CSV сначала. Если в поле будет разделитель прямо внутри поля в качестве простого символа, что будет делать регулярное выражение, которое разбивает поля по разделителям? Оно подумает, что это два поля. А это не два поля, а одно поле. А как же CSV понимает, сколько у него полей? А у этого формата есть экранирование, про которое ты не в курсе, которое прекрасно всё обозначает - где символ разделитель, а где тот же символ не разделитель. То же самое касается кавычек там двойных и прочего.
Вот модуль csv для того и создан, чтобы учитывать все нюансы при разборе csv-данных и безошибочно разбирать их.
Отредактировано AlekseyPythonSu (Ноя. 12, 2020 16:53:04)
Офлайн
124
есть такой метод заполнить массив из csv
data = np.genfromtxt('data.csv', delimiter=',', names=True)
Отредактировано xam1816 (Ноя. 12, 2020 20:59:58)
Офлайн
857
AlekseyPythonSuТебе ещё раз, дураку, говорят: CSV надо раскладывать по правилам CSV.
Я знаю как представлены мои данные и подобрал такой вид регулярного выражения
AlekseyPythonSuВот этот самый вопрос у тебя возник потому, что ты дурак какой-то. Причина только в этом.
Как в регулярном выражении указать, чтобы не происходил поиск значений поля в текстовой строке, а использовались наперед заданные значения (в вышеприведенном примере это 0)?
Офлайн
0
py.user.next
Тебе ещё раз, дураку, говорят: CSV надо раскладывать по правилам CSV.
Отредактировано AlekseyPythonSu (Ноя. 13, 2020 08:11:59)
Офлайн
0
xam1816Спасибо, этот метод действительно за счет параметра converters позволяет производить модификации полей во время заполнения массива. Но, к сожалению, мне не подходит:
есть такой метод заполнить массив из csv
Офлайн
186
> В файле не все данные, но я хочу сразу создать все необходимые мне колонки, а в те, для которых нет значений вписать 0.
Это я понял, а регулярки тебе зачем?
Офлайн