Изменить расширение файла для файлов в папке?
Я хотел бы изменить расширение файлов в определенной папке. Я читал об этой теме в форуме. используя идеи, я написал следующий код, и я ожидаю, что он сработает, но это не так. Я был бы благодарен за любое руководство, чтобы найти мою ошибку.
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')
Ответы
Ответ 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()