Изменить расширение файла для файлов в папке? - программирование
Подтвердить что ты не робот

Изменить расширение файла для файлов в папке?

Я хотел бы изменить расширение файлов в определенной папке. Я читал об этой теме в форуме. используя идеи, я написал следующий код, и я ожидаю, что он сработает, но это не так. Я был бы благодарен за любое руководство, чтобы найти мою ошибку.

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

Ответ 1

open в исходном файле не требуется, поскольку os.rename требуется только путь источника и назначения, чтобы выполнить задание. Более того, os.rename всегда возвращает None, поэтому не имеет смысла вызывать open по его возвращаемому значению.

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)
       newname = infilename.replace('.grf', '.las')
       output = os.rename(infilename, newname)

Я просто удалил два open. Проверьте, работает ли это для вас.

Ответ 2

Вам не нужно открывать файлы для их переименования, os.rename нужны только их пути. Также рассмотрите возможность использования модуля glob:

import glob, os

for filename in glob.iglob(os.path.join(folder, '*.grf')):
    os.rename(filename, filename[:-4] + '.las')

Ответ 3

Что-то вроде этого переименует все файлы в исполняемом каталоге, которые заканчиваются на .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")

Ответ 4

#!/usr/bin/env python

'''
Batch renames file 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()