0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
1

Парсер для двух текстовых файлов

01.01.2020, 21:37. Показов 6948. Ответов 11

Author24 — интернет-сервис помощи студентам
Здравствуйте уважаемые программисты... Пожалуйста научите как создать парсер для текстовых файлов?
Имеется:
1. Файл со списком имен.
2. Файл где нужно найти эти имена, и удалить построчно все содержимое.

https://drive.google.com/open?... txGTPkq-re

например:
1.Из первого файла берется название [vesper_cutter*sirr_blade]
2.Во втором файле находится соответствующая с этим названием строка, полностью выделяется и удаляется со всем остальным хламом:
Кликните здесь для просмотра всего текста
item_begin weapon 52 [vesper_cutter*sirr_blade] item_type=weapon slot_bit_type={lrhand} armor_type=none etcitem_type=none delay_share_group=-1 item_multi_skill_list={} recipe_id=0 blessed=0 weight=1520 default_action=action_equip consume_type=consume_type_normal initial_count=1 maximum_count=1 soulshot_count=1 spiritshot_count=1 reduced_soulshot={} reduced_spiritshot={} reduced_mp_consume={} immediate_effect=1 ex_immediate_effect=0 drop_period=10 duration={-1;0} use_skill_distime=0 period=0 equip_reuse_delay=0 price=0 default_price=146873000 item_skill=[none] critical_attack_skill=[none] attack_skill=[none] magic_skill=[none] item_skill_enchanted_four=[s_focus_hp_dual4_80] capsuled_items={} material_type=steel crystal_type=s84 crystal_count=7050 is_trade=1 is_drop=1 is_destruct=1 is_private_store=1 keep_type=15 physical_damage=482 random_damage=10 weapon_type=dual can_penetrate=0 critical=8 hit_modify=0 avoid_modify=0 dual_fhit_rate=50 shield_defense=0 shield_defense_rate=0 attack_range=40 damage_range={0;0;40;120} attack_speed=325 reuse_delay=0 mp_consume=0 magical_damage=176 durability=-1 damaged=0 physical_defense=0 magical_defense=0 mp_bonus=0 category={} enchanted=0 base_attribute_attack={none;0} base_attribute_defend={0;0;0;0;0;0} html=[item_default.htm] magic_weapon=0 enchant_enable=1 elemental_enable=1 unequip_skill={} for_npc=0 item_equip_option={} use_condition={} equip_condition={} is_olympiad_can_use=1 can_move=0 is_premium=0 /**/ item_end
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.01.2020, 21:37
Ответы с готовыми решениями:

Сравнение содержания двух текстовых файлов
Подскажите пожалуйста.как сравнить два файла в не зависимости от порядка слов в этих файлах написал эту программу но она сравнивает по...

скрипт сравнения двух текстовых файлов
Доброго времени суток! помогите с задачкой на Питоне пожалуйста... Суть задачи в том, что есть два текстовых файла, состоящие из...

Создание функции сравнение двух текстовых файлов по строкам в питоне
Нужна помощь.. я новичок мне нужно сделать сравнение двух текстовых документов по строчно, и после этого сделать валидацию текстового...

11
Эксперт Python
5437 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.01.2020, 21:41 2
Какой формат первого файла? (Точное описание или аттач файла)
Какой формат второго файла? (Точное описание или аттач файла)
Пример под спойлером непригоден для анализа, потому что непонятно куда делись переносы строк.
0
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
01.01.2020, 21:48  [ТС] 3
формат в обоих файлах одинаковый... я думаю что это utf 8..
под примером в файле 2 это все одна целая строка.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
37674 / 20919 / 4288
Регистрация: 12.02.2012
Сообщений: 34,390
Записей в блоге: 14
01.01.2020, 21:51 4
Garry Galler, удовлетворены ответом?
0
Эксперт Python
5437 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
01.01.2020, 22:55 5
Цитата Сообщение от Catstail Посмотреть сообщение
удовлетворены ответом?
Я его аттач (ссылку на google disk) не заметил сразу :-)
На форуме же принято нормальные аттачи делать, а не ссылками на внешние ресурсы.
------------------------------
Цитата Сообщение от Androlex Посмотреть сообщение
Файл где нужно найти эти имена, и удалить построчно все содержимое
1) Вопрос в том, что значит построчно, если в файле всего одна строка.
Что именно вы хотите удалить?
Берем, например, [vesper_cutter*sirr_blade] - ищем точное вхождение во втором файле и удаляем?
Ну дак это простым циклом с s.replace(sub) можно сделать.

Что-то более сложное? Читаем вопрос про "построчно".
Чтобы файл выглядел нормальным многострочным текстом делаем в текстовом редакторе замену \s+ на \r\n
После чего файл начинает выглядеть вот так:
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
item_begin
weapon
52
[vesper_cutter*sirr_blade]
item_type=weapon
slot_bit_type={lrhand}
armor_type=none
etcitem_type=none
delay_share_group=-1
item_multi_skill_list={}
recipe_id=0
blessed=0
weight=1520
default_action=action_equip
consume_type=consume_type_normal
initial_count=1
maximum_count=1
soulshot_count=1
spiritshot_count=1
reduced_soulshot={}
reduced_spiritshot={}
reduced_mp_consume={}
immediate_effect=1
ex_immediate_effect=0
drop_period=10
duration={-1;0}
use_skill_distime=0
period=0
equip_reuse_delay=0
price=0
default_price=146873000
item_skill=[none]
critical_attack_skill=[none]
attack_skill=[none]
magic_skill=[none]
item_skill_enchanted_four=[s_focus_hp_dual4_80]
capsuled_items={}
material_type=steel
crystal_type=s84
crystal_count=7050
is_trade=1
is_drop=1
is_destruct=1
is_private_store=1
keep_type=15
physical_damage=482
random_damage=10
weapon_type=dual
can_penetrate=0
critical=8
hit_modify=0
avoid_modify=0
dual_fhit_rate=50
shield_defense=0
shield_defense_rate=0
attack_range=40
damage_range={0;0;40;120}
attack_speed=325
reuse_delay=0
mp_consume=0
magical_damage=176
durability=-1
damaged=0
physical_defense=0
magical_defense=0
mp_bonus=0
category={}
enchanted=0
base_attribute_attack={none;0}
base_attribute_defend={0;0;0;0;0;0}
html=[item_default.htm]
magic_weapon=0
enchant_enable=1
elemental_enable=1
unequip_skill={}
for_npc=0
item_equip_option={}
use_condition={}
equip_condition={}
is_olympiad_can_use=1
can_move=0
is_premium=0
/**/
item_end

А теперь объясняем, что конкретно нужно удалять. От сих и до сих.
1
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
01.01.2020, 23:00  [ТС] 6
Ого, я впечатлен как вы разложили все по отдельным строкам... прошу прощения что не правильно представил формат строки.
Вот это все что Вы разложили - представляется как одна целая единственная огромная строка, которую и нужно удалить.)
0
Эксперт Python
5437 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.01.2020, 01:45 7
Лучший ответ Сообщение было отмечено Androlex как решение

Решение

Попробуйте это. Работать будет небыстро на ваших 15 тысячах строк из-за того, что компиляция шаблона регулярки динамическая (иначе никак) по ходу итерации.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re
with  open("2.txt",encoding="utf-16") as fd:
    text2 = fd.read() 
 
with open("1.txt") as fd:
    for pattern in fd:
        pattern = pattern.strip()
        if pattern:
            regex = "^(.+{}.+)$".format(re.escape(pattern))
            text2 = re.sub(regex,'',text2,flags=re.MULTILINE)
# удаление пустых строк
text2 = re.sub(r'\n\s*\n','\n',text2,re.MULTILINE)
# новый файл - можете указать имя прежнего файла
with open("2new.txt","w",encoding="utf-16") as f:
    f.write(text2)
1
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
03.01.2020, 20:42  [ТС] 8
Garry Galler, С уважением благодарю Вас! Cегодня протестирую и отпишусь с результатом...
0
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
04.01.2020, 04:10  [ТС] 9
Garry Galler, Вот это невероятно... все работает... потрясающе.. фантастика..) Вы мой герой!) Виртуальный волшебник!) Очень поражен насколько быстро и эффективно Вы откликнулись, и сделали все для решения моей задачи... Спасибо огромное! Духовного и материального богатства и процветания, счастья и дружбы, вдохновения и любви, познания и гениальных открытий желаю Вам...!
0
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
05.01.2020, 20:49  [ТС] 10
Garry Galler Посмотрите пожалуйста, что можно сделать с пустыми строками в конце файла...
прикрепляю получившийся файл после компиляции Вашим кодом ниже:

я пробовал вот это:
Кликните здесь для просмотра всего текста

string = open('file').readlines()

for i in string:
if not i.isspace():
print(i.replace('\n', ''))
---------------
with open('file.txt', 'r') as inf:
for line in inf:
if line.strip():
print(line)
with open('file.txt', 'r') as inf, open('outfile.txt', 'w') as out:
for line in inf:
if line.strip():
out.write(line)

но эти варианты не сработали...
Вложения
Тип файла: zip 2new.zip (338.5 Кб, 4 просмотров)
0
Эксперт Python
5437 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
06.01.2020, 14:07 11
Лучший ответ Сообщение было отмечено Androlex как решение

Решение

Я посмотрю. Регулярка "\n\s*\n" не очень сработала как оказалось для пустых строк.

Добавлено через 25 минут
Замените строчку 12 на эту. Эта регулярка пустые строки удаляет.
Python
1
text2 = re.sub(r'(^\s*\r?\n){2,}','', text2,flags=re.MULTILINE)
1
0 / 0 / 0
Регистрация: 01.01.2020
Сообщений: 7
06.01.2020, 22:17  [ТС] 12
Цитата Сообщение от Garry Galler Посмотреть сообщение
text2 = re.sub(r'(^\s*\r?\n){2,}','', text2,flags=re.MULTILINE)
Абсолютно сработало! Спасибо огромное!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.01.2020, 22:17
Помогаю со студенческими работами здесь

Программа для сравнения двух текстовых файлов
Составьте программу для сравнения двух текстовых файлов. Если файлы не совпадают, то на экран вывести первые неравные строки и номер...

Разработка программы для для слияния двух текстовых файлов
Требуется программа для слияния двух текстовых файлов. Условие задачи: "Разработать программу для слияния двух текстовых файлов в...

Выполнить слияние двух рассортированных текстовых файлов в третий упорядоченный файл. Сортировок не использовать. Дополнительных массивов и файлов не
Выполнить слияние двух рассортированных текстовых файлов в третий упорядоченный файл. Сортировок не использовать. Дополнительных массивов и...

Сравнение двух текстовых файлов
Добрый вечер! Задачка такая стоит: Сравнить два текстовых файла. Определить одинаковые ли они? То есть соответствуют ли соответствующие...

Сравнение двух текстовых файлов
Добрый день. задача следующая. Есть два текстовых файла, при этом один файл находится на удаленном сервере (доступ по авторизации), другой...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

Новые блоги и статьи
Сопоставление с образцом (Pattern Matching) в Python: Списки и словари
py-thonny 19.03.2025
Программисты любят, когда код говорит сам за себя. Представьте, что вы можете просмотреть структуру данных и мгновенно понять, что с ней делать — без сложных условий и вложенных проверок. Именно эту. . .
Работа с метаданными EXIF и JPEG в JavaScript
run.dev 19.03.2025
Работа с изображениями в веб-разработке нередко выходит за рамки простого отображения картинки. Современные задачи требуют глубокого понимания структуры файлов и умения манипулировать их внутренними. . .
Чеклист для Kubernetes в продакшене: Лучшие практики для SRE
Mr. Docker 19.03.2025
Когда сталкиваешься с запуском Kubernetes в продакшене, невольно задаешься вопросом: почему то, что так гладко работало в тестовой среде, вдруг начинает вызывать головную боль на боевых системах?. . .
Разработка продвинутого ИИ в Unity с использованием Behavior Graph
GameUnited 19.03.2025
В разработке игр искусственный интеллект персонажей часто становится тем элементом, который превращает хорошую игру в выдающуюся. До недавнего времени разработчикам под Unity приходилось либо писать. . .
Словари в Python: методы работы, оптимизация, сериализация
py-thonny 19.03.2025
Каждый хотя бы раз сталкивался с необходимостью хранить связанные данные, где важна не только сама информация, но и их взаимосвязь. В дебрях Python словари — это тот универсальный инструмент, который. . .
Реализация паттерна CQRS с Event Sourcing в PHP
Jason-Webb 19.03.2025
CQRS (Command Query Responsibility Segregation) — это архитектурный паттерн, который разделяет операции чтения и записи данных в приложении. Если вы столкнулись с ситуацией, когда ваше PHP-приложение. . .
std::span в C++: Подпредставлени­я и срезы
NullReferenced 18.03.2025
Если вы когда-нибудь работали с большими объемами данных в C++, то наверняка сталкивались с необходимостью манипулировать отдельными частями массивов или контейнеров. Традиционные подходы часто. . .
std::span в C++: Доступ к элементам и итерирование
NullReferenced 18.03.2025
В C++ каждый разработчик сталкивается с проблемой эффективного управления последовательностями данных. Представьте: вы работаете с массивом, передаете его в функцию, а затем в другую, и каждый раз. . .
Утечки памяти в C#
UnmanagedCoder 18.03.2025
Когда мы говорим о разработке приложений на C#, то часто успокаиваем себя мыслью, что сборщик мусора решит все наши проблемы с памятью. "Память управляется автоматически" — эта мантра прочно засела в. . .
std::span в C++: Введение в невладеющее представление
NullReferenced 18.03.2025
С появлением стандарта C++20 у нас появился новый инструмент — std::span, который представляет собой невладеющее представление для работы с последовательностями данных. std::span — это легковесный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru