web-dev-qa-db-fra.com

Changer l'extension de fichier pour les fichiers d'un dossier?

Je voudrais changer l'extension des fichiers dans un dossier spécifique. J'ai lu sur ce sujet dans le forum. en utilisant des idées, j’ai écrit le code suivant et j’attends que cela fonctionne, mais cela ne fonctionne pas. Je serais reconnaissant pour toute orientation pour trouver mon erreur. 

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

La open du fichier source n'est pas nécessaire, car os.rename n'a besoin que des chemins source et cible pour exécuter le travail. De plus, os.rename renvoie toujours None, il est donc inutile d'appeler open sur sa valeur de retour. 

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)

J'ai simplement enlevé les deux open. Vérifiez si cela fonctionne pour vous.

24
chenaren

Vous n'avez pas besoin d'ouvrir les fichiers pour les renommer, os.rename n'a besoin que de leurs chemins. Pensez également à utiliser le module glob :

import glob, os

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

Quelque chose comme ça va renommer tous les fichiers du répertoire qui se terminent par .txt en .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")
11
Emjay
#!/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 __== '__main__':
    main()
0
Ricky Wilson