有没有办法从文件夹中的所有文件中删除扩展名?

11 浏览
0 Comments

有没有办法从文件夹中的所有文件中删除扩展名?

我想要更改特定文件夹中文件的扩展名。我在论坛上阅读了相关主题,并使用这些想法编写了以下代码。我原本期望它能够工作,但事实并非如此。我将非常感谢任何指导以找到我的错误。

import os,sys
folder = 'E:/.../1936342-G/test'
for filename in os.listdir(folder):
    infilename = os.path.join(folder,filename)
    if not os.path.isfile(infilename): continue
    oldbase = os.path.splitext(filename)
    infile= open(infilename, 'r')
    newname = infilename.replace('.grf', '.las')
    output = os.rename(infilename, newname)
    outfile = open(output,'w')

0
0 Comments

有时候我们需要批量地将文件夹中的所有文件的扩展名去掉。有一个用户在论坛上提出了这个问题,并且给出了一段代码作为参考。然而,代码中有一些不必要的部分,而且还有一些问题需要解决。

代码中的open命令是多余的,因为os.rename只需要源文件和目标路径来完成任务。而且,os.rename始终返回None,所以调用open命令没有意义。

用户给出的代码如下:

import os
import sys
folder = 'E:/.../1936342-G/test'
for filename in os.listdir(folder):
    infilename = os.path.join(folder,filename)
    if not os.path.isfile(infilename): continue
    oldbase = os.path.splitext(filename)
    newname = infilename.replace('.grf', '.las')
    output = os.rename(infilename, newname)

上面的代码中,我删除了两个open命令。请尝试是否有效。

感谢您的建议,我调整了代码中的一行位置,它现在可以运行了,但是又遇到了一个问题:程序在outfile = open(output,'w')这一行卡住了。

看起来os.rename函数似乎没有返回文件路径。

用户提出的replace函数在这种情况下是不正确的,因为文件名可能会有多个点号,例如Smth.grform.grf

代码中的oldbase = os.path.splitext(filename)是用来获取文件名的基本部分(即去掉扩展名的部分)的。

非常感谢您提供的代码。然而,在我的情况下,文件名没有任何扩展名,我希望能给文件夹中的每个文件添加一个扩展名。如果您有什么建议,我将非常高兴...我不确定上述代码是否适用于我的情况:newname = infilename.replace('.grf', '.las')

只需使用newname = infilename + '.jpg',其中.jpg是您要添加的扩展名。

0
0 Comments

问题出现的原因:

使用上述代码时,运行过程会停在最后一行,并报错“系统找不到指定的文件”。这个错误的原因是代码中的文件名没有包含文件所在的路径信息。

解决方法:

在代码中添加文件所在的路径信息即可解决这个问题。具体的解决方法如下:

import os, sys
folder_path = os.path.dirname(os.path.abspath(__file__))
for filename in os.listdir(folder_path):
  base_file, ext = os.path.splitext(filename)
  if ext == ".txt":
    os.rename(os.path.join(folder_path, filename), os.path.join(folder_path, base_file + ".text"))

通过在代码中添加`os.path.join(folder_path, filename)`和`os.path.join(folder_path, base_file + ".text")`,将文件所在的路径信息和文件名拼接起来,就可以正确地找到文件并进行重命名操作了。

0
0 Comments

有时候我们可能需要批量更改文件夹中所有文件的扩展名。一个常见的需求是将文件夹中的所有文件的扩展名都移除掉。下面是一个Python代码片段,可以实现这个功能:

import glob, os
folder = '文件夹路径'
for filename in glob.iglob(os.path.join(folder, '*.*')):
    os.rename(filename, os.path.splitext(filename)[0])

代码中使用了Python的`glob`和`os`模块。首先,我们通过`glob.iglob`函数获取文件夹中的所有文件路径。然后,使用`os.rename`函数将文件的扩展名移除掉。

需要注意的是,代码中的`folder`变量需要替换成实际的文件夹路径。另外,代码还假设文件夹中的所有文件都有扩展名,如果有些文件没有扩展名,可能会出现错误。

如果想要将这个功能扩展到子文件夹中的文件,可以使用递归的方式来实现。下面是一个更新后的代码片段:

import glob, os
def remove_extension(folder):
    for root, dirs, files in os.walk(folder):
        for filename in files:
            filepath = os.path.join(root, filename)
            os.rename(filepath, os.path.splitext(filepath)[0])
folder = '文件夹路径'
remove_extension(folder)

这次我们使用了`os.walk`函数来遍历文件夹及其子文件夹中的文件。通过嵌套的循环,我们可以依次处理每个文件,并移除其扩展名。

同样,代码中的`folder`变量需要替换成实际的文件夹路径。

希望这些代码可以帮助你实现批量移除文件扩展名的需求。

0