Python 如何按扩展名添加文件';文件名_ext';。txt和递归地转换到文件夹中的所有文件,并将它们转换回原始扩展名

Python 如何按扩展名添加文件';文件名_ext';。txt和递归地转换到文件夹中的所有文件,并将它们转换回原始扩展名,python,file,directory,scripting,filesystems,Python,File,Directory,Scripting,Filesystems,我有一个代码,可以递归地将文件夹中扩展名为.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

我有一个代码,可以递归地将文件夹中扩展名为.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\u py.txt
,并希望使用另一个函数来反转此更改,即从
script\u py.txt
更改为
script.py
。 注意:上面的
.py
只是一个例子。扩展可以是类似于,
.pynb等的任何内容

另外,如果扩展名已经是
.txt
,我希望它保持原样。有什么帮助吗?

我希望这就是你想要的

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

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

我希望这就是你想要的

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

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

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

app.py
runApp.bat
demo.html
index.html
使用拆分附加扩展名:

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

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

app.py
runApp.bat
demo.html
index.html
使用拆分附加扩展名:

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

好的,听起来像是一些简单的字符串操作。你能把你试过的都写进去吗?好的,听起来像是一些简单的字符串操作。你能把你尝试过的东西包括进来吗?这没关系,但我不想把
py
txt
作为参数。我只希望我的参数是
dir
。将任何
file.ext
转换为
file\u ext.txt
的函数,以及将
file\u ext.txt
转换为
file.ext
的其他函数。请注意,我希望将这些函数同时递归地应用于文件夹、文件和子文件夹。这没关系,但我不希望将
py
txt
作为参数。我只希望我的参数是
dir
。将任何
file.ext
转换为
file\u ext.txt
的函数,以及将
file\u ext.txt
转换为
file.ext
的其他函数。请注意,我希望将这些函数递归地应用于文件夹、文件和子文件夹。