【问题标题】:How to append a file by extension 'filename_ext'.txt and recursively to all the files in a folder and convert them back into the original extension如何通过扩展名'filename_ext'.txt附加文件并递归地附加到文件夹中的所有文件并将它们转换回原始扩展名
【发布时间】:2019-12-30 07:29:19
【问题描述】:

我有一个代码可以递归地将文件夹内所有扩展名为 .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.txtscript.py。 注意:以上.py 只是一个例子。扩展名可以是 .pynb etc 另外,如果扩展名已经是.txt,我希望它保持原样。有什么帮助吗?

【问题讨论】:

  • 好的,听起来像是一些简单的字符串操作。您能否包括您尝试过的内容?

标签: python file directory scripting filesystems


【解决方案1】:

我希望这是你想要的

为了更安全,您应该编写一个脚本来检查文件是否包含多个“。”

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

【讨论】:

  • 这没关系,但我不希望 pytxt 作为参数。我只希望我的论点是dir。它将任何file.ext 转换为file_ext.txt 和其他将file_ext.txt 转换为file.ext 的函数。请注意,我想以递归方式一次将这些函数应用于文件夹、文件和子文件夹。
【解决方案2】:

由于文件名中的点字符后添加了扩展名,我们可以用“.”分割文件名。使用 file_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

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 2010-11-09
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多