Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90

Как сохранить обработанный текст в один файл?

12.03.2014, 17:56. Показов 4714. Ответов 22
Метки нет (Все метки)

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

Вот сам код,сделано на Python 3.3:

Python
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
# -*- coding: utf-8 -*-
 
openFile = open(r'C:\Documents and Settingsдминистраторабочий стол\open-accounts.txt', encoding='utf-8')
saveFile = open(r'C:\Documents and Settingsдминистраторабочий стол\output.txt', 'w', encoding='utf-8')
 
linesarray = openFile.readlines()
openFile.close()
seen = []
 
# этот цикл сравнивает строки на совпадение и удаляет повторяющие
for i in range(len(linesarray)):
    if seen.count(linesarray[i]) == 0:
        seen.append(linesarray[i])
        saveFile.write(linesarray[i])
 
saveFile.close()
 
# этот цикл обрезает строки
with open(r'C:\Documents and Settingsдминистраторабочий стол\output.txt', encoding='utf-8') as fin, \
     open(r'C:\Documents and Settingsдминистраторабочий стол\output-relise.txt', 'w', encoding='utf-8') as fout:
    for line in fin:
        print(line[-39:-3],file=fout )
 
print("Обработка завершена!")
input("Нажмите любую клавишу для выхода...")
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
12.03.2014, 17:56
Ответы с готовыми решениями:

Как сохранить обработанный текст из файла в другой файл?
Здравствуйте форумчане,Шарп ещё плохо знаю но кое какой код написал,который обрабатывает строки из файла по обеим сторонам,но проблема...

Как сохранить текст из нескольких richTextBox в один файл
Привет всем. По щелчку кнопки нужно сохранить текст из 2-ух richTextBox в один файл, но текст из второго затирает текст первого. Прошу...

Сохранить текст и массив в один файл
Как оптимально: создать файл txt, запихнуть в него массив с его названием(из лейбла) и благополучно сохранить?

22
23 / 23 / 16
Регистрация: 17.01.2014
Сообщений: 81
12.03.2014, 20:09
Заранее благодарить не стоит.

По-сути можно так сделать. Не знаю что там за данные внутри, но если читать по строкам первый файл - "open-accounts.txt" и проделывая нужные вам манипуляции, записывать результат в "output-relise.txt"

Мне кажется что код не полный. Зачем переменная seen?
0
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90
12.03.2014, 21:45  [ТС]
Переменная seen не знаю для чего,нашел где то в инете код этот.Самое главное он удаляет одинаковые строки.Дело в том,что когда первый цикл отработает,он сохраняет в файл output.txt,далее программа открывает output.txt и цикл обрезает уже строки как мне надо,но когда пытаюсь сохранить в этот же файл output.txt то ни чего не выходит,файл пустой,а если сохраняю в другой файл как в коде output-relise.txt то все сохраняет нормально,вот хотелось бы чтоб всё обработанное сохранялось в один файл output.txt ну или в output-relise.txt чтобы не создавалось два файла
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
12.03.2014, 21:58
lehaab,
Приведите пример входных данных, напишите, что с ними нужно сделать и куда нужно сохранить.
0
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90
12.03.2014, 23:59  [ТС]
tsar925 есть у меня база с никами и их id,и их очень много,напарсю их тысячами и возможно будут ники и id повторяться.

Пример:

[10:55] Object: LillyMarie143 Resident [ ad7517cc-42ac-4975-a683-157c630b5d93 ]
[10:55] Object: ChanceForYou Resident [ a800f603-a68e-44a2-ab41-14e99357fb79 ]
[10:55] Object: mar Caproni [ ee3adf99-6933-4799-8090-26f2ac2af559 ]
[10:55] Object: KATHERINECATS Resident [ 8d67ee52-c17a-43fe-ae1c-6fd94e08c0f3 ]
[11:44] Object: SensiQ Resident [ 4d9d1882-f415-4005-8fe5-44c2d991a0de ]
[11:44] Object: Zebbe Resident [ 2d31cc15-ad6e-4526-8f1c-fc94049ddf0f ]
[11:44] Object: LordCiCi Resident [ 6d5b1e9d-51a1-4fe9-91e9-74216d16e586 ]
[11:44] Object: PKR Resident [ 5afdd18d-d5c7-4f2c-a045-4450c64c874f ]
и.т.д.

Так вот,у меня в коде собранном в интернете половина кода работает так,открывает файл open-accounts.txt с этими строками и как понял заносит в массив,для удаления повторяющихся строк.И сохраняет в файл output.txt ,а вторая часть кода открывает файл output.txt и обрезает строки вот так:

ad7517cc-42ac-4975-a683-157c630b5d93
a800f603-a68e-44a2-ab41-14e99357fb79
ee3adf99-6933-4799-8090-26f2ac2af559
8d67ee52-c17a-43fe-ae1c-6fd94e08c0f3
4d9d1882-f415-4005-8fe5-44c2d991a0de
2d31cc15-ad6e-4526-8f1c-fc94049ddf0f
6d5b1e9d-51a1-4fe9-91e9-74216d16e586
5afdd18d-d5c7-4f2c-a045-4450c64c874f

При сохранении в тот же файл output.txt ни чего не сохраняется,приходится создавать файл output-relise.txt,тогда всё сохраняется отлично.Вопрос,как объединить эти две операции со строками и сохранить в 1 файл,а ни как у меня,удаление повторяющихся строк в один файл,а обрезанные строки во второй.
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
13.03.2014, 05:23
Как вариант:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import re
 
GUID = re.compile(r"\[\s+(.*?)\s+\]")
 
def main(in_name, out_name):
    """"""
 
    seen = set()
    guids = []
 
    with open(in_name, "rt", encoding="utf-8") as fin, \
            open(out_name, "wt", encoding="utf-8") as fout:
        for line in fin:
            if not line in seen:
                seen.add(line)
                guids.append(GUID.findall(line)[0])
                fout.write(line)
 
        fout.write("\n".join(guids))
Если Вам не хочется использовать модуль re, можете убрать все, что с ним связано и заменить строку
Python
1
guids.append(GUID.findall(line)[0])
на
Python
1
guids.append(line[-39:-3])
ЗЫ. Ваш код (из первого поста), путем удаления пяти строк (16-20) и редактирования двух (21-22) - тоже будет делать то, что Вы хотите.

Добавлено через 17 минут
Похоже я Вас не правильно понял , может так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re
 
GUID = re.compile(r"\[\s+(.*?)\s+\]")
 
def main(in_name, out_name):
    """"""
 
    seen = set()
 
    with open(in_name, "rt", encoding="utf-8") as fin, \
            open(out_name, "wt", encoding="utf-8") as fout:
        for line in fin:
            if not line in seen:
                seen.add(line)
                print(GUID.findall(line)[0], file=fout)
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
13.03.2014, 21:27
Я не совсем понял, что тебе нужно, вот этот код сейчас открывает входной файл, читает его и записывает в выходной файл, только уникальные значения.
Если нужно ещё, что-то напиши, доделаю.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python3.2
import collections
 
inp = open('input').readlines()
out = open('output', 'w')
 
counter = collections.Counter()
 
for i in iter(inp):
    data = i.split(']')[1].strip()
    counter[data] += 1
    if counter[data] == 1:
        out.write(i)
0
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90
14.03.2014, 00:00  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
#!/usr/bin/python3.2
import collections
inp = open('input').readlines()
out = open('output', 'w')
counter = collections.Counter()
for i in iter(inp):
* * data = i.split(']')[1].strip()
* * counter[data] += 1
* * if counter[data] == 1:
* * * * out.write(i)
Код работает отлично,удаляет повторяющие строки и сохраняет в один файл,но он не обрезает строки как писал выше в примере,покажу ниже ещё раз:

Входные данные допустим такие:

[10:55] Object: LillyMarie143 Resident [ ad7517cc-42ac-4975-a683-157c630b5d93 ]
[10:55] Object: ChanceForYou Resident [ a800f603-a68e-44a2-ab41-14e99357fb79 ]
[10:55] Object: mar Caproni [ ee3adf99-6933-4799-8090-26f2ac2af559 ]
[10:55] Object: KATHERINECATS Resident [ 8d67ee52-c17a-43fe-ae1c-6fd94e08c0f3 ]
[11:44] Object: SensiQ Resident [ 4d9d1882-f415-4005-8fe5-44c2d991a0de ]
[11:44] Object: Zebbe Resident [ 2d31cc15-ad6e-4526-8f1c-fc94049ddf0f ]
[11:44] Object: LordCiCi Resident [ 6d5b1e9d-51a1-4fe9-91e9-74216d16e586 ]
[11:44] Object: PKR Resident [ 5afdd18d-d5c7-4f2c-a045-4450c64c874f ]

А мне надо чтоб все обрезалось вот так:

ad7517cc-42ac-4975-a683-157c630b5d93
a800f603-a68e-44a2-ab41-14e99357fb79
ee3adf99-6933-4799-8090-26f2ac2af559
8d67ee52-c17a-43fe-ae1c-6fd94e08c0f3
4d9d1882-f415-4005-8fe5-44c2d991a0de
2d31cc15-ad6e-4526-8f1c-fc94049ddf0f
6d5b1e9d-51a1-4fe9-91e9-74216d16e586
5afdd18d-d5c7-4f2c-a045-4450c64c874f
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.03.2014, 00:06
Ты хочешь, чтобы за место [10:55] Object: LillyMarie143 Resident [ ad7517cc-42ac-4975-a683-157c630b5d93 ] в выходном файле было ad7517cc-42ac-4975-a683-157c630b5d93 да?
0
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90
14.03.2014, 00:10  [ТС]
Да именно так,мой код так и делал,но сохранять приходилось в несколько файлов,а хотелось бы в один
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.03.2014, 00:11
Лучший ответ Сообщение было отмечено lehaab как решение

Решение

Вот
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/python3.2
import collections
 
inp = open('input').readlines()
out = open('output', 'w')
 
counter = collections.Counter()
 
for i in iter(inp):
    data = i.split(']')[1].strip()
    counter[data] += 1
    if counter[data] == 1:
        out.write(i.split('[')[-1].split(']')[0].strip() + '\n')
1
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90
14.03.2014, 00:21  [ТС]
Цитата Сообщение от tsar925 Посмотреть сообщение
#!/usr/bin/python3.2
import collections
inp = open('input').readlines()
out = open('output', 'w')
counter = collections.Counter()
for i in iter(inp):
* * data = i.split(']')[1].strip()
* * counter[data] += 1
* * if counter[data] == 1:
* * * * out.write(i.split('[')[-1].split(']')[0].strip() + '\n')
Спасибо огромное,теперь самое то!
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
14.03.2014, 02:32
Цитата Сообщение от lehaab Посмотреть сообщение
Спасибо огромное,теперь самое то
А чем мой вариант не устроил? Он, к стати, не сравнимо быстрее и требует меньше ресурсов чем вариант tsar925,
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.03.2014, 06:16
pyuser, и с каких же пор, у нас регулярки дают неимоверный прирост в скорости, а?
Вот если мне память не изменяет, то методы строк гораздо шустрей. И рекомендуется использовать регулярки только тогда, когда строковых методов не хватает.
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
14.03.2014, 07:44
Цитата Сообщение от tsar925 Посмотреть сообщение
и с каких же пор, у нас регулярки дают неимоверный прирост в скорости, а?
Регулярки здесь лишние, согласен, и в своем посте я это отметил, а прирост скорости достигается тем, что проверка на вхождение в множество выполняется несравнимо быстрее Ваших манипуляций с Counter
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.03.2014, 07:54
Спорный вопрос.
0
3 / 3 / 1
Регистрация: 18.10.2013
Сообщений: 90
14.03.2014, 09:03  [ТС]
Цитата Сообщение от pyuser Посмотреть сообщение
А чем мой вариант не устроил? Он, к стати, не сравнимо быстрее и требует меньше ресурсов чем вариант tsar925,
Я ваш вариант пробовал,но он почему то у меня не чего не сохранил в выходной файл,возможно я что то не правильно сделал или не разобрался в коде
0
224 / 209 / 63
Регистрация: 26.05.2011
Сообщений: 363
14.03.2014, 09:29
Цитата Сообщение от tsar925 Посмотреть сообщение
Спорный вопрос.
Python
1
2
3
4
5
6
7
8
9
10
from collections import Counter
from timeit import timeit
 
SET = set(range(100000))
COUNTER = Counter(range(100000))
 
if "__main__" == __name__:
    print(timeit("999 in SET", "from __main__ import SET"))
    print(timeit("COUNTER[999] += 1\nif COUNTER[999] == 1: pass",
            "from __main__ import COUNTER"))
Вывод:
0.08759343330954097
0.7527106982271675
Цитата Сообщение от lehaab Посмотреть сообщение
возможно я что то не правильно сделал
Скорее всего, код я проверял.
1
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
14.03.2014, 14:29
Даже обрабатывая сто тысяч записей, время выполнения меньше секунды и это время ни как не ощущается (ждать не придётся ). К тому-же я не думаю, что lehaab нужно будет обрабатывать файл содержащий 100 000 записей, думаю данных гораздо меньше. Поэтому я считаю, что неважно сколько будет выполнятся этот кусок программы, от этого все равно не кому ни жарко, ни холодно.

P.S А вообще замечание интересное, спасибо, учту. О этом типе данных знал, но ни когда им не пользовался.
0
43 / 7 / 0
Регистрация: 27.11.2013
Сообщений: 96
14.03.2014, 17:05
как вариант еще
Python
1
2
3
4
5
6
7
import re, codecs
fIn = codecs.open('in.txt', 'r', 'utf-8')
fOut = codecs.open('out.txt', 'w', 'utf-8')
for line in fIn:
    m = re.findall('\[\s+(.*?)\s+\]', line)
    for i in m:
        fOut.write(i)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.03.2014, 17:05
Помогаю со студенческими работами здесь

Текст из Memo1 и Memo2 сохранить в один txt-файл
У меня есть ключ и шифр-текст. Нужно сохранить их в один ТХТ файл. Знаю как сохранить из ОДНОГО мемо в тхт, не нужно этого писать плз....

Как записать в файл обработанный Wav
у меня есть wav файл, я считала из него значения, сделала дискретизацию, а теперь мне нужно эти значения записать в новый wav, не понимаю...

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

Как сохранить числа с Edit1 и Edit2 в один файл
Подскажите как сохранить числа с Edit1 и Edit2 в один текстовый файл, так чтоб с Edit1 число сохранялось в первую строчку файла, а с Edit2...

Как сохранить три RichTextBox в один RTF файл?
Всем привет!!! Такой вопрос: На форме есть три ричтекстбокса. Как их все сохранить в один RTF файл. Делаю стандартными методами,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru