2017-08-03 169 views
0

所以我有一个目录DirDir有三个子目录,每个五个文件:重命名文件,而不扩展

  1. DIR/A /一,二,三,四,five.txt
  2. 迪尔/ B /一,二,三,四,five.txt
  3. DIR/C /一,二,三,四,five.txt

正如你可以看到有四个文件没有扩展和一个与.txt扩展离子

如何以递归方式重命名所有文件,而不扩展?

目前我想这一点,这适用于单个目录,但我怎么能捕获所有文件,如果我把这个脚本到Dir

import os, sys 

for filename in os.listdir(os.path.dirname(os.path.abspath(__file__))): 
    base_file, ext = os.path.splitext(filename) 
    if ext == "": 
     os.rename(filename, base_file + ".png") 
+0

看看os.walk()也许这个SO-问题:https://stackoverflow.com/questions/1176441/how-to-filter-files-with-known-type-from- os-walk –

回答

2

如果您想要执行递归遍历,请使用os.walk

for root, dirs, files in os.walk(os.path.dirname(os.path.abspath(__file__))): 
    for file in files: 
     base_path, ext = os.path.splitext(os.path.join(root, file)) 

     if not ext: 
      os.rename(base_path, base_path + ".png") 

os.walk将分离你的文件转换成正常的文件和目录,所以不需要os.path.isdir

+0

完美,非常感谢! – Lyux

0
import os 

my_dir = os.getcwd() 
for root, dirnames, fnames in os.walk(my_dir): 
    for fname in fnames: 
     if fname.count('.'): continue # don't process a file with an extension 
     os.rename(os.path.join(root, fname), os.path.join(root, "{}.png".format(fname)))