Как изменить расширение файла в списке файлов - PullRequest
1 голос
/ 05 мая 2019

У меня есть этот код для открытия папки с этими каталогами.Некоторые из них имеют расширение html, но не все.Как я могу изменить все файлы в моих трех подкаталогах, которые не имеют расширение html в .html?

from os import walk
mypath = ("/Users/martinagalletti/Desktop/parte 2 data mining/train")
f = []
for (dirpath,dirnames,filenames) in walk(mypath):
    f.extend(filenames)
    print(f)

Ответы [ 4 ]

2 голосов
/ 05 мая 2019

Если вы используете Python 3.4 или выше, рассмотрите возможность использования pathlib .

Вот решение вашей проблемы с использованием этого:

from pathlib import Path

mypath = Path('/Users/martinagalletti/Desktop/parte 2 data mining/train')

for f in mypath.iterdir():
    if f.is_file() and not f.suffix:
        f.rename(f.with_suffix('.html'))

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

from pathlib import Path

mypath = Path('/Users/martinagalletti/Desktop/parte 2 data mining/train')

for dir in mypath.glob('**'):
    for f in dir.iterdir():
        if f.is_file() and not f.suffix:
            f.rename(f.with_suffix('.html'))

А вот еще один способ пройтись по всем каталогам и обработать все файлы:

from pathlib import Path

mypath = Path('/Users/martinagalletti/Desktop/parte 2 data mining/train')

for f in mypath.glob('*'):
    if f.is_file() and not f.suffix:
        f.rename(f.with_suffix('.html'))

Использование Path.glob() с двумязвездочки перечислят все подкаталоги и только с одной звездочкой он перечислит все по этому пути.

Надеюсь, это поможет.

1 голос
/ 05 мая 2019

Вызовите эту функцию с вашим путем.

import os
import os.path


def ensure_html_suffix(top):
    for dirpath, _, filenames in os.walk(top):
        for filename in filenames:
            if not filename.endswith('.html'):
                src_path = os.path.join(dirpath, filename)
                os.rename(src_path, f'{src_path}.html')
1 голос
/ 05 мая 2019

Сначала напишите генератор пути к изображению с помощью следующей функции.

import os

def getimagepath(root_path):
    for root,dirs,filenames in os.walk(root_path):
        for filename in filenames:
            yield(os.path.join(root,filename))

Введите путь к папке в функции. Затем запустите цикл for, проверяя имя, заканчивающееся на html, затем измените имя на os.rename

paths = getimagepath("/Users/martinagalletti/Desktop/parte 2 data mining/train")
for path in paths:
    if not path.endswith('.html'):
         os.rename(path,path+'.html')
0 голосов
/ 05 мая 2019
ff = []
for (dirpath,dirnames,filenames) in os.walk(mypath):
    for f in filenames:
        if not f.endswith(".html"): #check if filename does not have html ext
            new_name = os.path.join(dirpath,f+".html")
            os.rename(os.path.join(dirpath,f),new_name) #rename the file
            ff.append(f+".html")
        else:
            ff.append(f)
    print(ff)
...