27

我想更改特定文件夹中文件的扩展名。我在论坛上读到了这个话题。使用确实的想法,我编写了以下代码,我希望它可以工作,但它没有。我将感谢任何指导以找到我的错误。

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

6 回答 6

38

源文件上的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. 检查这是否适合您。

于 2013-05-24T13:36:21.700 回答
19

您不需要打开文件来重命名它们,os.rename只需要它们的路径。还可以考虑使用glob模块:

import glob, os

for filename in glob.iglob(os.path.join(folder, '*.grf')):
    os.rename(filename, filename[:-4] + '.las')
于 2013-05-24T13:45:20.357 回答
11

像这样的东西会将执行目录中以 .txt 结尾的所有文件重命名为 .text

import os, sys

for filename in os.listdir(os.path.dirname(os.path.abspath(__file__))):
  base_file, ext = os.path.splitext(filename)
  if ext == ".txt":
    os.rename(filename, base_file + ".text")
于 2013-05-24T13:35:32.397 回答
2

导入操作系统

dir =("C:\\Users\\jmathpal\\Desktop\\Jupyter\\Arista")
for i in os.listdir(dir):
    files = os.path.join(dir,i)
    split= os.path.splitext(files)
    if split[1]=='.txt':
       os.rename(files,split[0]+'.csv')
于 2019-12-03T17:49:12.077 回答
0
#!/usr/bin/env python

'''
Batch renames file's extension in a given directory
'''

import os
import sys
from os.path import join
from os.path import splitext

def main():
    try:
        work_dir, old_ext, new_ext = sys.argv[1:]
    except ValueError:
        sys.exit("Usage: {} directory old-ext new-ext".format(__file__))

    for filename in os.listdir(work_dir):
        if old_ext == splitext(filename)[1]:
            newfile = filename.replace(old_ext, new_ext)
            os.rename(join(work_dir, filename), join(work_dir, newfile))


if __name__ == '__main__':
    main()
于 2015-11-20T22:11:02.757 回答
0

如果你有 python 3.4 或更高版本,你可以使用pathlib. 如下。此示例用于更改.txt.md.

from pathlib import Path

path = Path('./dir')

for f in path.iterdir():
    if f.is_file() and f.suffix in ['.txt']:
        f.rename(f.with_suffix('.md'))
于 2021-08-25T09:26:25.653 回答