Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278

Парсинг файла

19.06.2013, 16:40. Показов 4292. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Создаю файл со списком изображений *.png (часть этого списка под спойлером)
Кликните здесь для просмотра всего текста
01-01.png
01-02.png
01-03.png
01-04.png
01-05.png
01-06.png
01-1-01.png
01-1-02.png
01-1-03.png
01-1-04.png
02-01.png
02-02.png


Мне нужно вывести эти названия изображений в таком виде:
Кликните здесь для просмотра всего текста
01-01.png,01-01.png,01-01.png [символ табуляции] 01-02.png,01-02.png,01-02.png [символ табуляции] 01-03.png,01-03.png,01-03.png [символ табуляции] 01-04.png,01-04.png,01-04.png [символ табуляции] 01-05.png,01-05.png,01-05.png [символ табуляции] 01-06.png,01-06.png,01-06.png
01-1-01.png,01-1-01.png,01-1-01.png [символ табуляции] 01-1-02.png,01-1-02.png,01-1-02.png [символ табуляции] 01-1-03.png,01-1-03.png,01-1-03.png [символ табуляции] 01-1-04.png,01-1-04.png,01-1-04.png
02-01.png,02-01.png,02-01.png [символ табуляции] 02-02.png,02-02.png,02-02.png

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

Python
1
2
3
4
5
6
7
8
9
10
11
# -*- coding: cp1251 -*-
import os
import glob
f_path = os.path.dirname(__file__)  #Указываем каталог со скриптом
os.chdir(f_path)                    #Переход в каталог f_path
f_list = glob.glob('*.png')         #Получаем список файлов в каталоге
file = open('filelist.txt','w')     #Создание/открытие файла на запись
for el in f_list:                   #Запись в файл
    file.write(el + '\n')
 
file.close()
Добавлено через 1 час 1 минуту
Ребят, ОЧЕНЬ срочно нужна помощь...

Добавлено через 1 час 35 минут
То, что нужно получить на выходе не очень удачно написал, тяжело понять без детального рассмотрения "под лупой"
Возможно так будет немного понятнее:

"табом" нужно разделять файлы, которые отличаются индексом (это две последние цифры в имени изображения png)

например список из файлов:
11111-01.png
11111-02.png
22222-01.png
22222-02.png

нужно вывести так:
11111-01.png,11111-01.png,11111-01.png [TAB] 11111-02.png,11111-02.png,11111-02.png [переход на новую строку]
22222-01.png,22222-01.png,22222-01.png [TAB] 22222-02.png,22222-02.png,22222-02.png [переход на новую строку]

И так далее... Файлов с индексом может быть много, я привел пример только по 2 файла.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2013, 16:40
Ответы с готовыми решениями:

Чтение и парсинг файла
Пару часов назад начал учить питон. Дело такое: есть файл, в нем есть строка <title>Текст</title>...как вытащить слово...

Парсинг xml-файла(размером в 14,6 млн строк) lxml парсером
в общем вот здесь выкладываю архивированную базу данных в xml формате google.drive вот питоновский код, все очень примитивно, если...

Парсинг файла в python
У меня есть метод в классе def splited_message(cls, filename): with open(filename, 'r', encoding="utf-8") as file: ...

17
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
19.06.2013, 19:55
Сорри - забыл про утроение строк - вот исправленный вариант (в пять минут для правки коммента не успел )
Python
1
2
3
4
5
6
7
8
9
from itertools import groupby, imap
from os.path import splitext
 
def group_names(lst):
    def grouper(n):
        return '-'.join(splitext(n)[0].split('-')[:-1])
    def tripple_str(s):
        return ','.join([s]*3)
    return '\n'.join(['\t'.join(imap(tripple_str, it)) for _, it in groupby(lst, key=grouper)])
1
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278
19.06.2013, 20:12  [ТС]
Блин:
from itertools import groupby, imap
ImportError: cannot import name imap

Добавлено через 6 минут
Использую Python 3.3.2
Только начал изучать...
0
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
19.06.2013, 20:18
в тройке уберите imap и замените его обычным map - он и так итератор вернет, уточнять надо ))
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.06.2013, 20:21
Цитата Сообщение от s0rg Посмотреть сообщение
Python
1
2
3
4
5
6
from os.path import splitext
 
...
 
    def grouper(n):
        return '-'.join(splitext(n)[0].split('-')[:-1])
Python
1
2
3
4
5
6
7
8
>>> def grouper(n):
...     return n.rsplit('-', 1)[0]
... 
>>> grouper('01-1-01.png')
'01-1'
>>> grouper('01-1-2-3-01.png')
'01-1-2-3'
>>>
1
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
19.06.2013, 20:22
accept, Кстати - да, вечером голова уже не варит )
0
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278
19.06.2013, 20:36  [ТС]
Python
1
2
3
4
5
6
7
8
9
from itertools import groupby, map
from os.path import splitext
 
def group_names(lst):
    def grouper(n):
        return n.rsplit('-', 1)[0]
    def tripple_str(s):
        return ','.join([s]*3)
    return '\n'.join(['\t'.join(map(tripple_str, it)) for _, it in groupby(lst, key=grouper)])
Ошибка все равно. И как вывести в обработку все файлы *.png в каталоге используя этот код?
Миниатюры
Парсинг файла  
0
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
19.06.2013, 20:42
map не нужно имортировать - он и так есть, просто уберите его из импорта. Использовать просто - передать f_list из вашего когда в group_names, на выходе - получите строку, которую можно записать в файл.
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.06.2013, 20:49
Цитата Сообщение от Badger Посмотреть сообщение
Python
1
2
from itertools import groupby, map
from os.path import splitext
наверху остаётся только
Python
1
from itertools import groupby
1
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278
19.06.2013, 22:51  [ТС]
Мужики, спасибо. Выручили!

Вот что в итоге получилось:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import os
import glob
from itertools import groupby
 
f_path = os.path.dirname(__file__)
os.chdir(f_path)
f_list = glob.glob('*.png')
 
def group_names(lst):
    def grouper(n):
        return n.rsplit('-', 1)[0]
    def tripple_str(s):
        return ','.join([s]*3)
    return '\n'.join(['\t'.join(map(tripple_str, it)) for _, it in groupby(lst, key=grouper)])
 
file = open('filelist.txt','w')
file.write(group_names(f_list))
file.close
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
19.06.2013, 23:03
Цитата Сообщение от Badger Посмотреть сообщение
Python
1
2
3
file = open('filelist.txt','w')
file.write(group_names(f_list))
file.close
Python
1
2
with open('filelist.txt', 'w', encoding='utf-8') as fout:
    fout.write(group_names(f_list))
0
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278
20.06.2013, 10:26  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
Python
1
2
with open('filelist.txt', 'w', encoding='utf-8') as fout:
     fout.write(group_names(f_list))
Из IDLE работает отлично, а если просто запустить файл, то вот что говорит:
Code
1
2
3
4
Traceback (most recent call last):
  File "D:\--\temp\004\prog2.py", line 17, in <module>
    with open('filelist.txt', 'w', encoding='utf-8') as fout:
TypeError: 'encoding' is an invalid keyword argument for this function
Добавлено через 43 минуты
Цитата Сообщение от accept Посмотреть сообщение
Python
1
open() as fout:
Не могу найти в справке, что это означает?
0
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
20.06.2013, 16:19
Цитата Сообщение от Badger Посмотреть сообщение
Не могу найти в справке, что это означает?
with - это операции с менеджером контекста, означает что файл будет открыт (open) и связанный с ним объект будет доступен с именем fout (как раз конструкция open(...) as fout). Это нужно чтобы вне зависимости от того пройзойдет ли ошибка в блоке внутри with или нет - файловый объект будет гарантированно закрыт. Если у вас имена файлов содержат только цифры, или символы латиницы - можете просто убрать параметр с кодировкой из вызова open.
1
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278
20.06.2013, 20:59  [ТС]
Цитата Сообщение от s0rg Посмотреть сообщение
Если у вас имена файлов содержат только цифры, или символы латиницы - можете просто убрать параметр с кодировкой из вызова open.
А если бы они содержали русские или украинские символы, как избавиться от ошибки, кот. я привел выше?
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.06.2013, 21:08
Цитата Сообщение от Badger Посмотреть сообщение
Python
1
TypeError: 'encoding' is an invalid keyword argument for this function
значит, у тебя второй питон запускается, сделай, чтобы запускался третий
для второго питона
Python
1
with open('filelist.txt', 'w') as fout:
Добавлено через 1 минуту
Цитата Сообщение от Badger Посмотреть сообщение
А если бы они содержали русские или украинские символы
конечно, рано или поздно они начнут что-нибудь содержать и из-за этого придётся менять код
поэтому это пишется сразу, чтобы потом дела делать, а не с кодировками разбираться
1
 Аватар для Badger
95 / 95 / 4
Регистрация: 25.06.2012
Сообщений: 278
20.06.2013, 21:40  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
значит, у тебя второй питон запускается
Проверил - верно!
Цитата Сообщение от accept Посмотреть сообщение
сделай, чтобы запускался третий
А как?) В переменных средах указан python33, последним устанавливался 3й питон. Не знаю почему открываются программы вторым...
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
20.06.2013, 22:45
я бы удалил второй питон и переустановил третий (это проблемы винды, а не питона)
1
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
22.06.2013, 07:48
Цитата Сообщение от Badger Посмотреть сообщение
В переменных средах указан python33, последним устанавливался 3й питон. Не знаю почему открываются программы вторым...
Потому что python3.3 ставит launcher. Называется py и лежит в system32, это избавляет от необходимости прописывать что-либо в переменную PATH. По умолчанию launcher запускает самую младшую, из всех установленных, версию питона. Можете при запуске указывать конкретную версию,например:
Bash
1
py -3.3 module.py
, либо указывайте интерпретатор в первой строке скрипта, как в линуксе.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.06.2013, 07:48
Помогаю со студенческими работами здесь

Парсинг mp3 файла
Всем доброго времени. Изучаю вопрос парсинга мп3 файла по ДЗ без испольования сторонних библиотек - с чего нужно начинать? как получить...

Парсинг json файла
Здравствуйте, столкнулся с такой проблемой и не могу решить. Пытаюсь парсить json файл, и получить из него только нужные мне строки, а...

Парсинг xml файла
Есть файл подобного содержания. &lt;?xml version=&quot;1.0&quot; ?&gt; &lt;default:TED_EXPORT DOC_ID=&quot;587390-2020&quot; EDITION=&quot;2020238&quot;...

Парсинг файла с lxml
def parse_content(): with open('../../parse_content.html') as f: file = f.read() print(file) #выводит...

Парсинг тхт-файла
Здравствуйте уважаемые форумчане. У меня возникла проблема с парсингом txt-файла, который в последствии хотелось-бы воткнуть в sqlite (но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Программный отбор значения справочника
Maks 21.03.2026
Процедура ВодителиНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка) / / Отключаем стандартную обработку (стандартное открытие формы выбора без фильтров) . . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru