如何通过扩展名“filename\u ext”.txt和递归方式将文件附加到文件夹中的所有文件,并将其转换回原始扩展名

2024-05-02 18:14:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代码,可以递归地将文件夹中所有扩展名为.py的文件更改为.txt。 即:

def frm_ext_to_ext(directory, from_ext, to_ext):
       """
       directory, from_ext, to_ext should be passed as strings including '.'
       For example : directory = '/home/Desktop/folder/file',  from_ext = '.txt' ,  to_ext = '.py'
       """
       for foldername, subfolders, filenames in os.walk(directory):
           for f in filenames :
               if f.endswith('.py'):
                   base = os.path.splitext(f)[0]
                   os.rename(os.path.join(foldername, f), os.path.join(foldername, base + to_ext))

但我想更改文件名,如:

如果一个文件名是script.py,我想把它改成每个文件扩展名的script_py.txt,我想用另一个函数来逆转这个变化,即从script_py.txt改成script.py。 注意:上面的.py只是一个例子。扩展可以是.pynb etc 另外,如果扩展名已经是.txt,我希望它保持原样。有什么帮助吗


Tags: 文件topathinfrompytxtfor
2条回答

由于扩展名是在文件名中的点字符后添加的,因此我们可以使用file\u name.split(“.”)将文件名拆分为“.”,并将最后一个元素附加到文件名中。 例如,我的“D:\FlaskApp”目录中有以下文件

app.py
runApp.bat
demo.html
index.html

使用split附加扩展名:

import os
directory = "D:\FlaskApp"
for foldername, subfolders, filenames in os.walk(directory):
           for f in filenames :
              fl = f.split(".")
              print(fl[0] + "_" + fl[-1])

这将提供:

app_py
runApp_bat
demo_html
index_html

我希望这就是你想要的

为了更安全,您应该执行一个脚本来检查是否有一个文件包含多个“.”

def frm_ext_to_ext(directory, from_ext, to_ext):
       for foldername, subfolders, filenames in os.walk(directory):
           for f in filenames :
                ext = f.split('.')[1]               
                if(ext!='txt' and to_ext == 'txt'):
                    base = f.split('.')[0]
                    os.rename(os.path.join(foldername, f), os.path.join(foldername, base + '_' + ext + '.' + to_ext))
                elif(ext=='txt' and to_ext!='txt'):
                    base=f.split('_')[0]
                    os.rename(os.path.join(foldername, f), os.path.join(foldername, base + '.' + to_ext))

用法:

frm_ext_to_ext(DIR, 'py', 'txt')
frm_ext_to_ext(DIR, 'txt', 'py')

相关问题 更多 >