С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16

Заменить текст во всех файлах и названиях файлов

15.02.2019, 11:56. Показов 4440. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно заменить

HTML5
1
%3F
на

"?"

во всех файлах и названиях файлов, во всех папках

Все файлы (список файлов в папках и подпапках)
получаю так

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def get_link(cat):
    """ Получаем список ссылок на файлы в папке и подпапках
    """
    list_links = []
    for top, dirs, files in os.walk(cat):
        for nm in files:
            if nm.endswith(".html"):
                link = os.path.join(top, dir, nm)
                print(link)
                time.sleep(10)
                list_links.append(link)
                
    return list_links
потом, в принципе, можно каждый открыть, заменить все вхождения на требуемое, тут, думаю все просто
но как быть с названием файла?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.02.2019, 11:56
Ответы с готовыми решениями:

Как в папке заменить текст во всех файлах?
в папке несколько txt файлов, имеющие одну и ту же структуру. в них необходимо заменить определенные строки. как сделать с одним файлом я...

Хочу заменить текст и напечатать 1 страницу во всех файлах из папки
Чем заменить ActiveDocument???)) Sub FolderPrint() Dim sMyDir As String Dim sDocName As String sMyDir = "C:" ...

Word: заменить текст в названиях на ссылки
Здравствуйте! Можно ли заменить текст на поля SEQ в документе применительно к названиям таблиц и рисунков ? Например: Таблица 1.1...

8
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2019, 13:21
Так во всех файлах (в содержимом) или во всех названиях файлов?
Или и там и там?
Вообще эта операция называется unquote и производится одноименной функцией:
Python
1
2
3
4
>>> from urllib.parse import unquote
>>> unquote('%3F')
'?'
>>>
Кстати имена файлов со знаком ? на windows будут непортируемыми, так как здесь это запрещенный символ для файловых путей.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.02.2019, 13:32  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
Или и там и там?
и там, и там
сначала меняется в тексте, потом меняется название файла ЕСЛИ В НЕМ встречается то, что нужно заменить


os.rename =)

Добавлено через 35 секунд
Цитата Сообщение от Garry Galler Посмотреть сообщение
Кстати имена файлов со знаком ? на windows будут непортируемыми
хорошо, что я от вынь отказался четыре года назад =)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2019, 13:43
Цитата Сообщение от IRIP Посмотреть сообщение
хорошо, что я от вынь отказался четыре года назад =)
На linux файлы имеющие в именах такие символы тоже никто не создает. Потому что чревато...
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.02.2019, 14:14  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
На linux файлы имеющие в именах такие символы тоже никто не создает. Потому что чревато...
По-этому и хочу их переименовать! =)

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
60
61
62
63
64
'''заменяет во всех файлах текст и переименовывает файл
'''
 
import os
import lxml.html
import time
 
def get_link(cat):
    """ Получаем список ссылок на файлы в папке и подпапках
    """
    list_links = []
    for top, dirs, files in os.walk(cat):
        for nm in files:
            if nm.endswith(".html"):
                list_links.append(os.path.join(top, nm))
    
    return list_links
 
def replace_text(link):
    """ Находим все <a href> на странице и удаляем .html?p= из адреса
    """
    root = lxml.html.parse(
        link,
        parser=lxml.html.HTMLParser(encoding='utf-8')
    ).getroot()
    # находим все ссылки
    try:
        word = ???
        for x in range(0, len(word)):
            word[x].attrib.update([('.html?p=', '')])        
        dom_html = lxml.html.tostring(root, pretty_print=True, encoding='unicode')   
 
    except:
        dom_html = lxml.html.tostring(root, pretty_print=True, encoding='unicode')
    
    
    return dom_html
 
def raname_file(link):
    try:
        link.split('.html?p=')
    except OSError as e:
        print('Ошибка', link)
        
 
 
def main():
    cat = '/home/kalina/cat/dezz/dezzak/'
    for link in get_link(cat):
        print(link)
        data = replace_text(link)
        save_html(link, data)
        raname_file(link)
        time.sleep(10)
 
 
def save_html(link, data):
    with open(link, 'w') as f:
        f.write(data)
        f.close()
    
    
if __name__ == '__main__':
    main()
Что писать сюда? def raname_file и word = ???
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2019, 14:45
Цитата Сообщение от IRIP Посмотреть сообщение
По-этому и хочу их переименовать! =)
Я имел ввиду не
Цитата Сообщение от IRIP Посмотреть сообщение
%3F
, а как раз наоборот - ?.
Файлы в именах которых есть метасимволы типа ?*+[] - это всегда не good.

Как расквотировать строку я вам показал. Дальше думайте сами.
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.02.2019, 15:29  [ТС]
Garry Galler, да, в тексте встречается %3F
а в названии файла .html?p=

Цитата Сообщение от Garry Galler Посмотреть сообщение
Как расквотировать строку я вам показал. Дальше думайте сами.
да в принципе все понятно, не понятно как получить имя файла для внесения изменений
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
15.02.2019, 16:09
У вас все пути сюда записываются.
Python
1
list_links.append(os.path.join(top, nm))
пройдитесь циклом по list_links и переименуйте через os.rename(src, unqoute(src))
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
15.02.2019, 20:49  [ТС]
Garry Galler, что я делаю не так =)?

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
'''заменяет во всех файлах текст и переименовывает файл
'''
 
import os
import lxml.html
import time
 
def get_link(cat):
    """ Получаем список ссылок на файлы в папке и подпапках
    """
    list_links = []
    for top, dirs, files in os.walk(cat):
        for nm in files:
            if nm.endswith(".html"):
                list_links.append(os.path.join(top, nm))
    
    return list_links
 
 
def new_file_name(link):
 
    try:
        if '.html?p=' in link:
            split = link.split('/')[-1]
            repls = split.replace('.html?p=', '_')
            return repls
    except OSError as e:
        print('Ошибка', link)
        return link
 
 
def main():
    cat = '/home/kalina/cat/dezz/dezzak/'
    for link in get_link(cat):
        print(link)
        os.rename(link, new_file_name(link))
        time.sleep(10)
    
    
if __name__ == '__main__':
    main()
Добавлено через 2 часа 54 минуты
Garry Galler, спасибо за наводки

вот так вроде, получилось

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def new_file_name(link):
    try:
        if '.html?p=' in link:
            split = link.split('/')[-1]
            repls = split.replace('index.html?p=', 'dez')
            return repls
    except OSError as e:
        print('Ошибка', link)
        return link
 
 
def main():
    cat = '/home/kalina/cat/dezz/dezzak/'
    for link in get_link(cat):
        print(link)
        #data = replace_text(link)
        #save_html(link, data)
        os.rename(os.path.join(cat, link), os.path.join(cat, new_file_name(link)))
        time.sleep(10)
нужно было пути прописать

Добавлено через 1 час 37 минут
Garry Galler, в общем, программа удалила все .html файлы которые не содержат в названии index.html?p=
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.02.2019, 20:49
Помогаю со студенческими работами здесь

Крякобрязы в названиях всех типов файлов. Windows 7 32 домашняя
Установил вновь windows 7 32 домашняя на ноутбук HP. Получил крякобрязы в наваниях всех типов файлов. В разделе Языки всё пробовал....

Заменить определенный текст в файле .txt для всех файлов в выбранной папке
Есть код который меня это для одного указанного файла, как сделать чтобы менял для всех в определенной папке? const ForWriting = 2 ...

Поиск файлов на всех дисках с расширением *.bat найти в них конкретный текст и заменить
Добрый день! Хочу сделать батник. Ни как не могу найти как сделать поиск файлов на всех дисках с расширением *.bat найти в них...

Заменить строку во всех файлах директории
имеется директория например back и в ней 10 файлов(file1,file2....file10) во всех файлах есть строка &quot;saha&quot;!Как заменить эту...

Найти текст во всех исходных файлах
Найти текст во всех исходных файлах: В качестве 1-го параметра получить слово и найти его во всех файлах с расширением .C....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru