Форум сайта python.su
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Я сначала делал через запятую, но в Excel он некорректно открывался…
Естественно, никто не пишет CSV-файлы, проставляя там разделитель вручную. Да и разделитель в CSV-файлах должен быть запятой, потому что CSV - это Comma-Separated Values, где слово comma переводится как запятая. И признак окончания записи в таком файле не \n, а \r\n. Ну, ты этого не знаешь всего, это видно.
Отредактировано Cyr (Окт. 14, 2021 10:57:17)
Офлайн
CyrЯ думаю, ты не понимаешь, как работает твой собственный скрипт. Поэтому ты и не можешь оценить, правильно ли он работает.
Так проще же запустить и увидеть что он делает.
Отредактировано py.user.next (Окт. 14, 2021 11:12:38)
Офлайн
py.user.nextЯ вручную построчно проверил исходный html и выходной файл загруженный в Excel. Всё сошлось.
Я думаю, ты не понимаешь, как работает твой собственный скрипт. Поэтому ты и не можешь оценить, правильно ли он работает.
py.user.nextВ кодировке utf-8 крякозябры в Excel
Ну, например, ты открываешь файл в кодировке utf-8 и читаешь из него, а при записи результата где указание кодировки utf-8? То есть ты явно не догоняешь, что она там везде должна быть.
py.user.nextЯ написал и отладил скрипт, который делает то, что нужно.
Ну, а если ты и словами не можешь описать, что тебе надо сделать, то складывается очень большое подозрение, что ты не знаешь точно, что тебе нужно сделать и код чего ты пытаешься написать.
Отредактировано Cyr (Окт. 14, 2021 13:14:21)
Офлайн
py.user.nextДык там эти символы как раз и встречаются.
А зачем там везде двойные кавычки в CSV-файле? Ты знаешь, что они нужны только там, где в поле встречается разделитель полей как символ? Они несут в себе чисто экранирующую функцию.
py.user.nextГлавное, что он корректно открывается в Excel.
Если бы ты знал, что CSV-файл пишется через модуль csv, то ты бы его записал, открыл и увидел это всё. Да, можно и заменить запятую на точку с запятой, но при этом все остальные правила CSV-формата остались бы. А так ты даже не знаешь, чем заканчиваются строки в CSV-формате, потому что не знаешь, как устроен CSV-формат.
py.user.nextДа. Именно так.
Подводя итог:
Значит, тебе нужно три поля: первое поле - название звонка; второе поле - количество единиц; третье поле - тип единиц.
На разрывы страниц, которых там несколько штук, внутри HTML-файла не смотрим (будто их нет).
Также не рассматриваем итоговые поля с подсчитанными значениями.
Отредактировано Cyr (Окт. 14, 2021 11:16:40)
Офлайн
Мы тут говорим уже вторую страницу не потому, что у тебя задача какая-то сложная, а потому, что ты постоянно пытаешься нам тут доказать, что ты в состоянии её сделать, а это не так. Элементарнейших вещей не знаешь и споришь что-то.
Так что смотри выше, я итог подвёл.
И мы все очень хорошо увидели твой уровень, так что можешь не спорить. Просто отвечай на вопросы, которые тебе задают.
Офлайн
CyrВ слове “Секунда” есть символ точка с запятой? А может быть в слове “Штука”? Что-то не видно. Так что модуль нормальный (а не твоя вот эта самодельная хрень) будет писать это без кавычек без двойных, потому что там ничего не надо экранировать.
Дык там эти символы как раз и встречаются.
>>> 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)
Офлайн
py.user.nextГде-то я читал, что строки надо в кавычки заключать, а числа - нет.
В слове “Секунда” есть символ точка с запятой? А может быть в слове “Штука”? Что-то не видно. Так что модуль нормальный (а не твоя вот эта самодельная хрень) будет писать это без кавычек без двойных, потому что там ничего не надо экранировать.
py.user.nextВ linux вроде используется только \n
И признак окончания записи в таком файле не \n, а \r\n.
Отредактировано Cyr (Окт. 14, 2021 11:26:31)
Офлайн
CyrCSV - это не linux-понятие. Это межсистемное понятие, такое же, как XML или JSON. Поэтому там строгие правила и их надо соблюдать. Вот rfc по этому формату. То есть иными словами, CSV-файл - это не просто какой-то текстовый файл с запятыми или точками с запятой в разных строках. CSV-файл - это нечто более сложное. Каждый кусочек в нём имеет какое-то значение, какой-то смысл. И это не просто так придумано. Вот ты говоришь “а почему не \n?”. А потому не \n, потому что поля в CSV-формате могут быть многострочными. Этот формат умеет любые тексты хранить. Поэтому в нём так всё и заведено.
В linux вроде используется только \n
Отредактировано py.user.next (Окт. 14, 2021 11:44:14)
Офлайн
py.user.nextНу сделал же. Может не “по науке”, но работает.
Мы тут говорим уже вторую страницу не потому, что у тебя задача какая-то сложная, а потому, что ты постоянно пытаешься нам тут доказать, что ты в состоянии её сделать, а это не так
py.user.nextВидимо ему не до этого…
Сейчас xam1816 придёт, будет делать. Ему надо практиковаться.
Отредактировано Cyr (Окт. 15, 2021 14:26:45)
Офлайн
CyrНе, он просто где-то завис. Я-то эту фигню за три секунды сделаю, просто ему не мешает попрактиковаться. Мне-то от этого польза нулевая. Подождём ещё, потом я сделаю, если он не проснётся.
Видимо ему не до этого
Офлайн