Найти - Пользователи
Полная версия: Парсинг html таблиц от FastReport
Начало » Центр помощи » Парсинг html таблиц от FastReport
1 2 3
Cyr
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 он некорректно открывался…
py.user.next
Cyr
Так проще же запустить и увидеть что он делает.
Я думаю, ты не понимаешь, как работает твой собственный скрипт. Поэтому ты и не можешь оценить, правильно ли он работает.
Ну, например, ты открываешь файл в кодировке utf-8 и читаешь из него, а при записи результата где указание кодировки utf-8? То есть ты явно не догоняешь, что она там везде должна быть.

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

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

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

Подводя итог:
Значит, тебе нужно три поля: первое поле - название звонка; второе поле - количество единиц; третье поле - тип единиц.
На разрывы страниц, которых там несколько штук, внутри HTML-файла не смотрим (будто их нет).
Также не рассматриваем итоговые поля с подсчитанными значениями.
В результате должен получиться CSV-файл с разделителями-запятыми, заменёнными на разделители-точки с запятой с сохранением CSV-формата.
Cyr
py.user.next
Я думаю, ты не понимаешь, как работает твой собственный скрипт. Поэтому ты и не можешь оценить, правильно ли он работает.
Я вручную построчно проверил исходный html и выходной файл загруженный в Excel. Всё сошлось.
py.user.next
Ну, например, ты открываешь файл в кодировке utf-8 и читаешь из него, а при записи результата где указание кодировки utf-8? То есть ты явно не догоняешь, что она там везде должна быть.
В кодировке utf-8 крякозябры в Excel
py.user.next
Ну, а если ты и словами не можешь описать, что тебе надо сделать, то складывается очень большое подозрение, что ты не знаешь точно, что тебе нужно сделать и код чего ты пытаешься написать.
Я написал и отладил скрипт, который делает то, что нужно.
И хотел бы увидеть тут более “академически” правильный код.
Cyr
py.user.next
А зачем там везде двойные кавычки в CSV-файле? Ты знаешь, что они нужны только там, где в поле встречается разделитель полей как символ? Они несут в себе чисто экранирующую функцию.
Дык там эти символы как раз и встречаются.
py.user.next
Если бы ты знал, что CSV-файл пишется через модуль csv, то ты бы его записал, открыл и увидел это всё. Да, можно и заменить запятую на точку с запятой, но при этом все остальные правила CSV-формата остались бы. А так ты даже не знаешь, чем заканчиваются строки в CSV-формате, потому что не знаешь, как устроен CSV-формат.
Главное, что он корректно открывается в Excel.
py.user.next
Подводя итог:
Значит, тебе нужно три поля: первое поле - название звонка; второе поле - количество единиц; третье поле - тип единиц.
На разрывы страниц, которых там несколько штук, внутри HTML-файла не смотрим (будто их нет).
Также не рассматриваем итоговые поля с подсчитанными значениями.
Да. Именно так.
py.user.next
Мы тут говорим уже вторую страницу не потому, что у тебя задача какая-то сложная, а потому, что ты постоянно пытаешься нам тут доказать, что ты в состоянии её сделать, а это не так. Элементарнейших вещей не знаешь и споришь что-то.
Так что смотри выше, я итог подвёл.
И мы все очень хорошо увидели твой уровень, так что можешь не спорить. Просто отвечай на вопросы, которые тебе задают.
py.user.next
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'
>>>
Cyr
py.user.next
В слове “Секунда” есть символ точка с запятой? А может быть в слове “Штука”? Что-то не видно. Так что модуль нормальный (а не твоя вот эта самодельная хрень) будет писать это без кавычек без двойных, потому что там ничего не надо экранировать.
Где-то я читал, что строки надо в кавычки заключать, а числа - нет.
в любом случае в Виде услуги есть и запятые и точки с запятой.

py.user.next
И признак окончания записи в таком файле не \n, а \r\n.
В linux вроде используется только \n
py.user.next
Cyr
В linux вроде используется только \n
CSV - это не linux-понятие. Это межсистемное понятие, такое же, как XML или JSON. Поэтому там строгие правила и их надо соблюдать. Вот rfc по этому формату. То есть иными словами, CSV-файл - это не просто какой-то текстовый файл с запятыми или точками с запятой в разных строках. CSV-файл - это нечто более сложное. Каждый кусочек в нём имеет какое-то значение, какой-то смысл. И это не просто так придумано. Вот ты говоришь “а почему не \n?”. А потому не \n, потому что поля в CSV-формате могут быть многострочными. Этот формат умеет любые тексты хранить. Поэтому в нём так всё и заведено.
Cyr
py.user.next
Мы тут говорим уже вторую страницу не потому, что у тебя задача какая-то сложная, а потому, что ты постоянно пытаешься нам тут доказать, что ты в состоянии её сделать, а это не так
Ну сделал же. Может не “по науке”, но работает.
py.user.next
Сейчас xam1816 придёт, будет делать. Ему надо практиковаться.
Видимо ему не до этого…
py.user.next
Cyr
Видимо ему не до этого
Не, он просто где-то завис. Я-то эту фигню за три секунды сделаю, просто ему не мешает попрактиковаться. Мне-то от этого польза нулевая. Подождём ещё, потом я сделаю, если он не проснётся.
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