Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 14, 2021 10:54:03

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

Парсинг html таблиц от FastReport

py.user.next
Так что не надо свой чудо-скрипт пихать нам; описывай словами, а мы будем думать уже, как это правильно сделать.
Так проще же запустить и увидеть что он делает.
Ну вот на выходе:
"Исх. на мобильные дом. региона, Билайн; Пензенская Область, моб. связь, Билайн";9,00;"Секунда"
"Исх. на мобильные дом. региона, МТС; Пензенская Область, моб. связь, МТС";112,00;"Секунда"
"Вх. с мобильных дом. региона; Пензенская Область, моб. связь, МТС";113,00;"Секунда"
"Вх. с мобильных дом. региона; Пензенская Область, моб. связь, МТС";64,00;"Секунда"
"Исх. на мобильные дом. региона, МТС; Пензенская Область, моб. связь, МТС";32,00;"Секунда"
"Исх. на мобильные дом. региона, МТС; Пензенская Область, моб. связь, МТС";48,00;"Секунда"
"Входящее сообщение";0,00;"Штука"
"Входящее сообщение";0,00;"Штука"
...
"Входящее сообщение";0,00;"Штука"
"Вх. с мобильных дом. региона; Пензенская Область, моб. связь, МТС";30,00;"Секунда"
py.user.next
Естественно, никто не пишет CSV-файлы, проставляя там разделитель вручную. Да и разделитель в CSV-файлах должен быть запятой, потому что CSV - это Comma-Separated Values, где слово comma переводится как запятая. И признак окончания записи в таком файле не \n, а \r\n. Ну, ты этого не знаешь всего, это видно.
Я сначала делал через запятую, но в Excel он некорректно открывался…

Отредактировано Cyr (Окт. 14, 2021 10:57:17)

Офлайн

#2 Окт. 14, 2021 11:01:43

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

Парсинг html таблиц от FastReport

Cyr
Так проще же запустить и увидеть что он делает.
Я думаю, ты не понимаешь, как работает твой собственный скрипт. Поэтому ты и не можешь оценить, правильно ли он работает.
Ну, например, ты открываешь файл в кодировке utf-8 и читаешь из него, а при записи результата где указание кодировки utf-8? То есть ты явно не догоняешь, что она там везде должна быть.

Ну, а если ты и словами не можешь описать, что тебе надо сделать, то складывается очень большое подозрение, что ты не знаешь точно, что тебе нужно сделать и код чего ты пытаешься написать.

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

Если бы ты знал, что CSV-файл пишется через модуль csv, то ты бы его записал, открыл и увидел это всё. Да, можно и заменить запятую на точку с запятой, но при этом все остальные правила CSV-формата остались бы. А так ты даже не знаешь, чем заканчиваются строки в CSV-формате, потому что не знаешь, как устроен CSV-формат.

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



Отредактировано py.user.next (Окт. 14, 2021 11:12:38)

Офлайн

#3 Окт. 14, 2021 11:11:44

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

Парсинг html таблиц от FastReport

py.user.next
Я думаю, ты не понимаешь, как работает твой собственный скрипт. Поэтому ты и не можешь оценить, правильно ли он работает.
Я вручную построчно проверил исходный html и выходной файл загруженный в Excel. Всё сошлось.
py.user.next
Ну, например, ты открываешь файл в кодировке utf-8 и читаешь из него, а при записи результата где указание кодировки utf-8? То есть ты явно не догоняешь, что она там везде должна быть.
В кодировке utf-8 крякозябры в Excel
py.user.next
Ну, а если ты и словами не можешь описать, что тебе надо сделать, то складывается очень большое подозрение, что ты не знаешь точно, что тебе нужно сделать и код чего ты пытаешься написать.
Я написал и отладил скрипт, который делает то, что нужно.
И хотел бы увидеть тут более “академически” правильный код.

Отредактировано Cyr (Окт. 14, 2021 13:14:21)

Офлайн

#4 Окт. 14, 2021 11:12:42

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

Парсинг html таблиц от FastReport

py.user.next
А зачем там везде двойные кавычки в CSV-файле? Ты знаешь, что они нужны только там, где в поле встречается разделитель полей как символ? Они несут в себе чисто экранирующую функцию.
Дык там эти символы как раз и встречаются.
py.user.next
Если бы ты знал, что CSV-файл пишется через модуль csv, то ты бы его записал, открыл и увидел это всё. Да, можно и заменить запятую на точку с запятой, но при этом все остальные правила CSV-формата остались бы. А так ты даже не знаешь, чем заканчиваются строки в CSV-формате, потому что не знаешь, как устроен CSV-формат.
Главное, что он корректно открывается в Excel.
py.user.next
Подводя итог:
Значит, тебе нужно три поля: первое поле - название звонка; второе поле - количество единиц; третье поле - тип единиц.
На разрывы страниц, которых там несколько штук, внутри HTML-файла не смотрим (будто их нет).
Также не рассматриваем итоговые поля с подсчитанными значениями.
Да. Именно так.

Отредактировано Cyr (Окт. 14, 2021 11:16:40)

Офлайн

#5 Окт. 14, 2021 11:15:34

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

Парсинг html таблиц от FastReport

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



Офлайн

#6 Окт. 14, 2021 11:18:01

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

Парсинг html таблиц от FastReport

Cyr
Дык там эти символы как раз и встречаются.
В слове “Секунда” есть символ точка с запятой? А может быть в слове “Штука”? Что-то не видно. Так что модуль нормальный (а не твоя вот эта самодельная хрень) будет писать это без кавычек без двойных, потому что там ничего не надо экранировать.

Сейчас xam1816 придёт, будет делать. Ему надо практиковаться. А вот потом уже я покажу, как это делать правильно.

А пока что просто пример, как оно должно писаться в итоге
  
>>> import csv
>>> import io
>>> 
>>> lst = ['Исх. на мобильные дом. региона, Билайн; Пензенская Область, моб. связь, Билайн',
...        '9,00',
...        'Секунда']
>>> 
>>> stream = io.StringIO()
>>> writer = csv.writer(stream, dialect='excel', delimiter=';')
>>> writer.writerow(lst)
95
>>> 
>>> stream.seek(0)
0
>>> stream.read()
'"Исх. на мобильные дом. региона, Билайн; Пензенская Область, моб. связь, Билайн";9,00;Секунда\r\n'
>>>



Отредактировано py.user.next (Окт. 14, 2021 11:27:25)

Офлайн

#7 Окт. 14, 2021 11:23:01

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

Парсинг html таблиц от FastReport

py.user.next
В слове “Секунда” есть символ точка с запятой? А может быть в слове “Штука”? Что-то не видно. Так что модуль нормальный (а не твоя вот эта самодельная хрень) будет писать это без кавычек без двойных, потому что там ничего не надо экранировать.
Где-то я читал, что строки надо в кавычки заключать, а числа - нет.
в любом случае в Виде услуги есть и запятые и точки с запятой.

py.user.next
И признак окончания записи в таком файле не \n, а \r\n.
В linux вроде используется только \n

Отредактировано Cyr (Окт. 14, 2021 11:26:31)

Офлайн

#8 Окт. 14, 2021 11:29:47

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

Парсинг html таблиц от FastReport

Cyr
В linux вроде используется только \n
CSV - это не linux-понятие. Это межсистемное понятие, такое же, как XML или JSON. Поэтому там строгие правила и их надо соблюдать. Вот rfc по этому формату. То есть иными словами, CSV-файл - это не просто какой-то текстовый файл с запятыми или точками с запятой в разных строках. CSV-файл - это нечто более сложное. Каждый кусочек в нём имеет какое-то значение, какой-то смысл. И это не просто так придумано. Вот ты говоришь “а почему не \n?”. А потому не \n, потому что поля в CSV-формате могут быть многострочными. Этот формат умеет любые тексты хранить. Поэтому в нём так всё и заведено.



Отредактировано py.user.next (Окт. 14, 2021 11:44:14)

Офлайн

#9 Окт. 15, 2021 14:24:19

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

Парсинг html таблиц от FastReport

py.user.next
Мы тут говорим уже вторую страницу не потому, что у тебя задача какая-то сложная, а потому, что ты постоянно пытаешься нам тут доказать, что ты в состоянии её сделать, а это не так
Ну сделал же. Может не “по науке”, но работает.
py.user.next
Сейчас xam1816 придёт, будет делать. Ему надо практиковаться.
Видимо ему не до этого…

Отредактировано Cyr (Окт. 15, 2021 14:26:45)

Офлайн

#10 Окт. 15, 2021 14:32:05

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

Парсинг html таблиц от FastReport

Cyr
Видимо ему не до этого
Не, он просто где-то завис. Я-то эту фигню за три секунды сделаю, просто ему не мешает попрактиковаться. Мне-то от этого польза нулевая. Подождём ещё, потом я сделаю, если он не проснётся.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version