如何更改列表中文件的文件扩展名

时间:2019-05-05 10:32:24

标签: python list subdirectory os.walk

我有这段代码用于打开包含这些目录的文件夹。其中一些扩展名为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 个答案:

答案 0 :(得分:2)

如果您使用的是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 :(得分:1)

首先,编写具有以下功能的图像路径生成器。

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')

答案 2 :(得分:1)

使用您的路径调用此函数。

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')

答案 3 :(得分:0)

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)