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

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

03.09.2019, 12:20. Показов 15734. Ответов 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
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
03.09.2019, 12:45
Вы их по одному и гуя меняете что ли? Засуньте в цикл. Гуй тут ни к чему.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.09.2019, 12:56  [ТС]
dondublon Я же поэтому и написал туточки, потому что знаю, как сделать

Добавлено через 6 минут
Точнее не знаю!
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
03.09.2019, 13:14
Damenikx, да, уже вижу, что уровень на айс.
В процедуре clicked у вас обработка файла. Имя файла в переменной choosefile, это глобалка. Глобалки вообще недопустимы, забудьте про них.
Имя файла должно передаваться в функцию, как параметр. Эту функцию вызывайте в цикле по файлам. Подсказка: os.walk или os.listdir.
Python
1
2
for filename in os.listdir(...)# имя каталога. или os.walk если с заходом.
   clicked(filename)
clicked переименуйте во что-нибудь поосмысленнее.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.09.2019, 15:12  [ТС]
dondublon Согласен, уровень очень начинающего. Сейчас переделаю, спасибо за подсказку

Добавлено через 7 минут
Хм, не понимаю. Я не могу вызвать переменную, если она не глобальна, значит мне надо вернуть результат clicked_dialogOpen в неё же, а потом вызвать, так?

Добавлено через 48 минут
Ничего не выходит(

Добавлено через 20 минут
Я не могу понять как мне вызвать функцию с параметром в другой функици:

Python
1
2
def clicked_dialogOpen(path):
    path=filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
Python
1
2
3
def change_Files():
    try:
        with open(clicked_dialogOpen(path), 'r+', encoding='utf-8') as f:
Не выходит(
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
03.09.2019, 15:44
Damenikx, ты поразишься, это сенсация, но все функции в пайтон что-то возвращают! Если написано ретурн то они возвращают именно то, что после него, если НЕ написано (как в твоих функциях) то возвращает None
Вызывать внутри одной функции другую, которая вернет None, нет смысла
это я про
Цитата Сообщение от Damenikx Посмотреть сообщение
with open(clicked_dialogOpen(path),
.

К чему весь это сарказм? еще с первой твоей темы я советовал тебе начать читать, ну не перепрыгнуть несколько ступеней в обучении, их придется пройти все, пойми! Пожалуйста, возьми книгу и читай, от корки до корки, потом возращайся новым человеком.
1
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
03.09.2019, 15:59
Цитата Сообщение от Damenikx Посмотреть сообщение
Я не могу вызвать переменную, если она не глобальна, значит мне надо вернуть результат clicked_dialogOpen в неё же, а потом вызвать, так?
Нет. Функция принимает параметры. Вернуть результат через return, если нужно (а тут нужно ли - ещё вопрос). Вот правда, почитай какой-нибудь вводный курс, это уже слишком.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.09.2019, 16:30  [ТС]
Я читал про параметры и функции. Пробовал по разному, уже даже в кнопку затолкал всё это дело
В любом случае, спасибо за помощь.
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 08:52  [ТС]
Welemir1 Весь вечер вчера сидел, результата не добился

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

Python
1
2
3
def clicked_dialogOpen():
    fileName = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    return fileName
Python
1
2
3
def change_Files(fileName):
    try:
        with open(change_Files(clicked_dialogOpen(fileName)), 'r+', encoding='utf-8') as f: # тут я пробовал по разному написать
Только постоянно получаю ошибку missing 1 required positional argument: 'fileName'
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 29
04.09.2019, 08:55
Damenikx, что еще раз доказывает мою правоту. Знаешь, что нужно сделать? ПРоект пока закрыть (он еще пригодится, когда ты со смехом все поправишь). Берем книгу и читаем, всю! С основ и до самого конца, метаклассы можешь не читать, особое внимание на функции, замыкания, локальные и глобальные переменные.
К концу книги очень многое прояснится и сможешь свой код поправить или лучше переписать.

Добавлено через 2 минуты
Цитата Сообщение от Damenikx Посмотреть сообщение
clicked_dialogOpen(fileName)
но эта функция не принимает аргументов
Цитата Сообщение от Damenikx Посмотреть сообщение
def change_Files(fileName):
* * try:
* * * * with open(change_Files(clicked_dialogOpen(fileName))
это замах на рекурсию? думаю нет, ты просто не понимаешь что делаешь. Это не плохо, плохо то, что ты не пытаешься почитать и узнать как это делается, просто тыкаешь и пытаешься подобрать решение не понимая.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 10:57  [ТС]
УРА! Получилось! Но...
Программа выполняется при нажатии на кнопку выбора файла )) Я выбираю файл и она сразу выполняется без нажатия на кнопку "Выполнить", в моём случае "Зарубить".

Добавлено через 1 минуту
Welemir1 Я прочёл вчера главы про функции и параметры.

Python
1
2
3
def clicked_dialogOpen():
    fileName = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    return change_Files(fileName)
Python
1
2
3
def change_Files(fileName):
    try:
        with open(fileName, 'r+', encoding='utf-8') as f:
Добавлено через 1 час 46 минут
Ещё почитав у меня складывается впечатление, что нельзя из одной функции выдрать только переменную, без запуска этой функции. Чем дальше в лес ...

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

Добавлено через 1 минуту
Получается надо добавить ещё функцию, которая будет содержать в себе ТОЛЬКО путь к файлу, а функция которая запуска fileDialog будет отдельно?
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
04.09.2019, 11:03
Цитата Сообщение от Damenikx Посмотреть сообщение
Ещё почитав у меня складывается впечатление, что нельзя из одной функции выдрать только переменную, без запуска этой функции. Чем дальше в лес ...
Не надо ничего выдирать. Функция возвращает что-то чрез return.
Цитата Сообщение от Damenikx Посмотреть сообщение
Получается надо добавить ещё функцию, которая будет содержать в себе ТОЛЬКО путь к файлу, а функция которая запуска fileDialog будет отдельно?
Бинго! Ну, почти
Учитывая, что гуй тут не нужен, как я отметил выше - - -
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 11:13  [ТС]
Ну хоть в чём-то я оказался прав!
Вопрос только один! Что такое гуй?!

Добавлено через 8 минут
Раз я решил добавить ещё одну функцию, которая будет в себе содержать только путь к файлу, значит из функции clicked_dialogOpen() этот путь в функцию надо передать. Вот я и опять застрял...
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
04.09.2019, 11:23
Damenikx, гуй - вольная транскрипция GUI = graphic user interface. То есть окошки и кнопочки. Включая ваш любимый fileDialog, с которым вы никак не решаетесь порвать.

Цитата Сообщение от Damenikx Посмотреть сообщение
Раз я решил добавить ещё одну функцию, которая будет в себе содержать только путь к файлу, значит из функции clicked_dialogOpen() этот путь в функцию надо передать. Вот я и опять застрял.
Для тренировки можно, но вообще он не нужен.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 11:25  [ТС]
У меня получилось сделать следующим образом:
Функция, которая отвечает за выбор файла:

Python
1
2
3
def clicked_dialogOpen():
    fileName = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    return pathToFile(fileName)
Затем функция, которая хранит в себе путь к файлу:

Python
1
2
def pathToFile(fileName):
    return
А тут тупик, мне надо вызывать функцию pathToFile, как параметр к той которая обрабатывает файлы?

Добавлено через 1 минуту
Цитата Сообщение от dondublon Посмотреть сообщение
Для тренировки можно, но вообще он не нужен.
Тогда я вообще не догоняю, получается можно обойтись без третьей функции.

Цитата Сообщение от dondublon Посмотреть сообщение
Damenikx, гуй - вольная транскрипция GUI = graphic user interface. То есть окошки и кнопочки. Включая ваш любимый fileDialog, с которым вы никак не решаетесь порвать.
А, понятно, к сожалению, не могу как же мне тогда выбирать файлы которые редактировать, а которые нет? Без гуя никак.
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
04.09.2019, 11:32
Цитата Сообщение от Damenikx Посмотреть сообщение
Затем функция, которая хранит в себе путь к файлу:
Она не хранит, она принимает.
Цитата Сообщение от Damenikx Посмотреть сообщение
мне надо вызывать функцию pathToFile, как параметр к той которая обрабатывает файлы?
Смотря что делает эта функция. Название подходящее для переменной.

Python
1
2
3
4
5
6
7
8
9
def clicked_dialogOpen():
    fileName = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    return fileName
 
def process_file(file_name):
    # что-то делаем с файлом по имени file_name
 
fn = clicked_dialogOpen()
process_file(fn)
Добавлено через 3 минуты
Цитата Сообщение от Damenikx Посмотреть сообщение
А, понятно, к сожалению, не могу как же мне тогда выбирать файлы которые редактировать, а которые нет? Без гуя никак.
Я так понял, вам надо просто перебрать все файлы в некотором каталоге.
Ну, если надо выбирать - тогда да, пусть диалог вернёт вам группу файлов.
Главное - отделять гуй от собственно логики, не смешивать.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 11:37  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Я так понял, вам надо просто перебрать все файлы в некотором каталоге.
Почти. Есть множетсво каталогов и множество файлов в них, но мне нужны оттуда не все, а только определённые. Идея была в том, чтобы создать какое-то пространство в котором пути к нужным файлам будут находиться, а затем, после нажатия кнопки "Зарубить" (в моём случае), выполняется сама программа. Но вы сказали там, далеко вверху, что нельзя использовать глобальные переменные и тогда я отложил свою основную задачу по дабавлению файлов для последующей их обработки и приступил к исправлению кода в котором имеется глобальная переменная. Вот и застрял
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
04.09.2019, 11:43
Damenikx, можно сделать список файлов в виде отдельного файла txt - если меняется он редко, а читается многократно. Если же список меняется постоянно - гуй лучше.
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
04.09.2019, 11:45  [ТС]
Меняется постоянно, поэтому пришлось обратиться к этому гую, от которого уже спать нормально не могу, потому что не получается передать этот путь, блин!

Добавлено через 50 секунд
Python
1
2
3
4
5
6
7
8
9
def clicked_dialogOpen():
    fileName = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ("all files", "*.*")))
    return fileName
 
def process_file(file_name):
    # что-то делаем с файлом по имени file_name
 
fn = clicked_dialogOpen()
process_file(fn)
Так у нас открытие файла начинается при запуске программы, а не при нажатии на кнопку
0
Эксперт Python
 Аватар для dondublon
4649 / 2069 / 366
Регистрация: 17.03.2012
Сообщений: 10,173
Записей в блоге: 6
04.09.2019, 11:47
Цитата Сообщение от Damenikx Посмотреть сообщение
что нельзя использовать глобальные переменные
Кроме того, есть ещё такая тонкая материя, как глобальные переменные и глобальные значения (variables vs values). Первые недопустимы, вторые иногда можно себе позволить.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.09.2019, 11:47
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru