Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.52/75: Рейтинг темы: голосов - 75, средняя оценка - 4.52
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533

Добавление нескольких файлов для последующего редактирования

03.09.2019, 12:20. Показов 15766. Ответов 158

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане! Не так давно, благодаря знатокам из данного форума была написана (спасибо за всё) программа. Суть её в следующем: На диске лежат файлики в которых 20 строк, каждую десятую строку программа вставляет пустую строку, затем копирует содержимое 10-й строки, добавляет перед пустой строкой (проще говоря дублирует 10-ю строку), затем дублирует 11-ю и добавляет перед 11-й строкой (капец туфтология), наглядно это вот так:

Было:
7
8
9
10
11
12
13

Стало:
7
8
9
10
10

11
11
12
13

И так программка делает каждую 10-ю строку! Строк может быть уйма. Всё работает всё делится, как надо, вопрос таков:
Файлов которые нужно редактировать много, поэтому, я хотелось бы сделать, что-то типа добавления или запоминания нескольких файлов, а затем их сразу переделывать, что каждый раз не указывать файл заново. Файлы лежат в разных папках, поэтому забирать из корня не выйдет. Желательно сделать наглядно, чтобы я уже видел, какие файлики я добавил, а какие нет! Заранее спасибо за помощь!

Собственно и сама программа:
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
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
from tkinter import *
from tkinter import ttk
import os
 
from tkinter import messagebox
from tkinter import filedialog
 
def update_the_label():
    lb0 = Label(window, text = "-")
 
def clicked_dialogOpen():
    global choosefile
    choosefile=filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    lb0 = Label(window, text = choosefile)
    lb0.pack(side ="top")
 
def clicked():
    try:
        with open(choosefile, 'r+', encoding='utf-8') as f:
            lines = f.readlines()
            f.seek(0)
            for i in range(int(combo.get())-1, len(lines), int(combo.get())):
                lines[i]+=lines[i][0:21] + "\n\n"
                if i <len(lines)-1:
                    lines[i+1]=lines[i+1][0:21] + " Информация: " + "\n" + lines[i+1]
            f.writelines(lines)
        f.close()      
    except:
        messagebox.showerror("Ошибка", "Дядь, файлик то выбери!")
    messagebox.showinfo("Завершение", "Готова")
 
window = Tk()
window.title("Дырка")
window.geometry('220x400')
window.resizable('false', 'false')
 
lb1 = Label(window, text = "Диапазон строк: ")
lb1.pack(side ="top")
 
combo=ttk.Combobox(window, values=(2,10,50,100,250,500,600,700,800,900,1000), width=28)
combo.current(0)
combo.pack(side ="top")
 
btn3 = Button(window, text = "Обновить список", command = update_the_label, width=26)
btn3.pack(side = "top")
 
btn2 = Button(window, text = "Открыть файл", command=clicked_dialogOpen, width=26)
btn2.pack(side ="top")
 
btn = Button(window, text ="Зарубить", command=clicked, width=26)
btn.pack(side ="top")
 
lb2 = Label(window, text = "_________________________")
lb2.pack(side ="top")
 
lb3 = Label(window, text = "Список отредактированных файлов:")
lb3.pack(side ="top")
 
window.mainloop()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.09.2019, 12:20
Ответы с готовыми решениями:

Сохранить данные из них для последующего просмотра и редактирования
имеется несколько полей в которые заносятся данные. как мне сохранить данные из них для последующего просмотра и редактирования?

Как целиком загрузить таблицу из SQL БД в браузер для последующего её редактирования?
Как целиком загрузить таблицу из SQL БД в браузер для последующего её редактирования?

Добавление картинки через диалоговое окно по кнопке, для последующего сохранения в таблицу
Здравствуйте, в бд имеется таблица с полями Оле. В поля Оле добавляются картинки с изделиями. Создал форму для добавления картинок и...

158
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 11:48  [ТС]
Студворк — интернет-сервис помощи студентам
Я знаю, чтоWelemir1 в курсе, как это делается Но он хитрец не рассказывает, хочет, чтобы я книги читал
0
Эксперт Python
 Аватар для dondublon
4651 / 2071 / 366
Регистрация: 17.03.2012
Сообщений: 10,178
Записей в блоге: 6
04.09.2019, 11:49
Цитата Сообщение от Damenikx Посмотреть сообщение
Так у нас открытие файла начинается при запуске программы, а не при нажатии на кнопку
Не, я, конечно, всё понимаю, но нельзя же так бездумно всё копипастить.
Это просто примерный фрагмент, как вернуть значение из одной функции и передать в другую. Он совершенно не обязан быть на верхнем уровне в модуле, даже более того - я сказал выше, что оно должно быть в цикле. А цикл, в свою очередь, тоже в какой-то функции.

Добавлено через 28 секунд
Цитата Сообщение от Damenikx Посмотреть сообщение
Я знаю, чтоWelemir1 в курсе, как это делается Но он хитрец не рассказывает, хочет, чтобы я книги читал
Ну вообще он прав, у меня тоже терпение скоро кончится.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 11:53  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Кроме того, есть ещё такая тонкая материя, как глобальные переменные и глобальные значения (variables vs values). Первые недопустимы, вторые иногда можно себе позволить.
Вот в том то и проблема, что с этим fileDialog'ом фиг достать этот путь без ещё одного вызова функции в которой опять открывается fileDialog. Поэтому я и использовал глобалку.

Добавлено через 1 минуту
Цитата Сообщение от dondublon Посмотреть сообщение
Не, я, конечно, всё понимаю, но нельзя же так бездумно всё копипастить.
Не, не. Я не копипастил. Есть программа, которая работает по этому принципу, без гуи, там так и реализовано, как Вы писали. Поэтому я и сказалЬ

Добавлено через 24 секунды
Цитата Сообщение от dondublon Посмотреть сообщение
Ну вообще он прав, у меня тоже терпение скоро кончится.
Тогда прошу прощение за нервотрёпку.

Добавлено через 1 минуту
В цикле это то понятно, для нескольких файлов, только мне бы сначала теперь с одним разобраться.
0
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 12:03
Damenikx, я так понимаю, сейчас у вас в проекте та ещё кашица, равномерно растёкшаяся по всему коду.
Что бы исправить это, советую вам написать блок-схему работы вашей программы.
К каждому блоку этой блок-схему припишите фрагмент кода, который это делает. Если получается, что возле одного блока больше 5-и строк кода, пересмотрите ещё раз, возможно этот блок у вас выполняет больше одной функции, а так быть не должно.
К каждой стрелочке припишите входящие переменные перед блоком и результирующие после блока. Так же можно сюда добавить ожидаемые конкретные значения.

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

Подобным образом нас учили ваять архитектуру сурового энтерпрайз-софта. Ещё и приговаривали: если вы не можете в течении 15 секунд придумать обоснуй для блока и озвучить его, если у вас получается слишком много пояснений и аргументации, то с этим блоком явно что-то не то.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 12:18  [ТС]
Alli_Lupin, не поверите, нарисовал уже. Я тоже учился в университете и проходил основы алгоритмизации и программирования. Я не могу понять, почему я не могу из функции вытянуть только переменную. Допустим с#, там это делается запросто. Возможно мне надо пересмотреть построение, сделать классы.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
04.09.2019, 12:32
Цитата Сообщение от Damenikx Посмотреть сообщение
Допустим с#, там это делается запросто.
тут еще проще

Цитата Сообщение от Damenikx Посмотреть сообщение
Возможно мне надо пересмотреть построение, сделать классы.
недостаток знания матчасти
1
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 12:37
Цитата Сообщение от Damenikx Посмотреть сообщение
я не могу из функции вытянуть только переменную
Воспользуйтесь отладчиком того же PyCharm и посмотрите, где именно она лежит.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 14:34  [ТС]
Welemir1, уже перечитал Лутца, главу с функциями, перерыл интЫрнет. Не получается блин, без fileDialog - никаких проблем, а с ним ну не могу!

Добавлено через 14 секунд
Alli_Lupin, наверное стоит всё таки поставить.

Добавлено через 1 минуту
Alli_Lupin, спасибо за идею.

Добавлено через 28 секунд
Welemir1, подскажите, куда копать.

Добавлено через 1 час 41 минуту
Ну, наверное оставлю глобальную переменную, ибо я не могу понять, как это сделать.

Добавлено через 6 минут
Я понимаю, что можно сделать так:

Python
1
2
3
def clicked_dialogOpen():
    takeFile = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    change_Files(takeFile)
Python
1
2
3
def change_Files(takeFile):
    try:
        with open(takeFile, 'r+', encoding='utf-8') as f:
Но так, я передам всю функцию, а не то, что содержит переменная takeFile
0
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 14:38
Damenikx, так с помощью инструкции return вы можете вернуть только то, что вам надо. Надо всё - верните всё, надо только путь - верните путь.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 14:47  [ТС]
Alli_Lupin, вот я и пишу:

Python
1
2
3
def clicked_dialogOpen():
    takeFile = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    return takeFile
Добавлено через 9 секунд
Так вы имеете ввиду?
0
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 14:50
Damenikx, да. Вам результат чем-то не нравится?
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 14:54  [ТС]
Я не могу в другую функцию взять этот результат. Только ВСЮ функцию, а значит на вторую кнопу мне опять придётся выбирать файл.

Добавлено через 1 минуту
У меня одна функция отвечает за выбор файла, а вторая за изменения в выбранном файле.
0
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 14:59
Damenikx, а вы хотите, что бы путь хранился и переиспользовался? Тогда вам надо смотреть в сторону объектов и объекты передавать в функции. Либо мутить 3-ю функцию, которая будет вызывать диалог выбора файлов. Уже из этой функции вызывать все остальные, где надо путь к файлу.
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 15:01  [ТС]
Alli_Lupin, Вот! До третьей функции я и дошёл, я додумался спустя сутки что нужно разделить всё это дело. Что одна функция будет только открывать файл, вторая будет передавать имя этого файла, а третья уже выполнять. Но я встрял опять. Я не догоняю как мне сначала передать в одну функцию, а потом в другую.
0
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 15:20
Damenikx, у вас алгоритм линейный, или интерактивный, с ветвлением?
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 15:34  [ТС]
Линейный же, тут всё по порядку, никаких ветвления нема. Не считая try, except ну это просто исключения.

Добавлено через 44 секунды
Я просто не понимаю, как в Python вытянуть эту блинскую переменную, одну, без функции, просто переменную!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!

Добавлено через 9 минут
Объясните мне дибилу пожалуйста, как это делается, я уже весь интернет перерыл, нет там ничего похожего.
0
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 15:36
Damenikx, если дело дошло до таких нервов, воспользуйтесь глобальной переменной. Это плохая практика, но работать будет.
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
04.09.2019, 15:38
Цитата Сообщение от Damenikx Посмотреть сообщение
Объясните мне дибилу пожалуйста, как это делается, я уже весь интернет перерыл, нет там ничего похожего.
а что в книге говорится?

Цитата Сообщение от Damenikx Посмотреть сообщение
как в Python вытянуть эту блинскую переменную, одну, без функции, просто переменную!
ничего не понятно

Python
1
2
3
def get_value():
    x=1
    return x
вот переменная вернулась из функции
1
5025 / 1054 / 147
Регистрация: 29.01.2013
Сообщений: 6,182
04.09.2019, 15:41
Цитата Сообщение от Welemir1 Посмотреть сообщение
вот переменная вернулась из функции
ТС хочет переиспользуемую переменную. Что бы и сюда использовать, и туда использовать, а окошки смотреть не хочется.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 15:56  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
вот переменная вернулась из функции
Так а вы теперь попробуйте её впихнуть отдельно в другую функцию, но не затрагивая fileDialog
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2019, 15:56
Помогаю со студенческими работами здесь

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

Добавление нескольких файлов в БД
Мне надо вывести в бд сразу несколько файлов в форме. сказали что надо преобразовать массив в строку с помощью serialize() чтобы добавить...

Добавление нескольких файлов в бд
Добрый день. Столкнулься с проблемой, так как сам в програмировании пребиваю на начальной стадии обучения прошу совета. Необходимо...

Процедурное создание мира с целью его последующего редактирования
Привет, Я так и не придумал как сформировать свой запрос в гугле, поэтому надеюсь на вашу помощь. Итак, я хочу, чтобы юнити создал мне...

Добавление нескольких файлов в OpenFileDialog
Надо сделать чтоб можно было выбрать несколько файлов в OpenDialog Пока вот что сделал, место пути выдаёт OpenFileDialog1. ...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru