这个应该重命名文件的python代码出了什么问题?

时间:2011-09-04 01:19:25

标签: python

这段代码是要求一个目录,然后列出该目录中的al文件,然后重命名为该列表中的位置,问题是我总是得到错误2,找不到文件,而如果我打印列表它显然找到了这些文件,因为列表不是空白的。

import os, sys    
path = input("input path: ")    
dirs = os.listdir(path)    
for i in range(0,len(dirs)):    
    os.rename(dirs[i], str(i))

给定输入文件,我想用数字重命名基本文件名,但保留文件扩展名。因此

输入 'a.txt','test.txt','test1.txt'

输出 '0.txt','1.txt','2.txt'

1 个答案:

答案 0 :(得分:5)

是的,所以你需要添加评论中的代码。问题是os.listdir只返回基本文件名,所以当调用重命名时,它希望在Python认为应该在的任何目录中找到这些文件。通过添加os.path.join,它将构建出来文件的完全限定路径,以便重命名可以正常工作。

在评论中,OP表示文件被移动到一个文件夹,这使我相信重命名需要第二个参数的完全限定路径。此外,我们了解到文件不应该从foo.txt重命名为0,而应该变为0.txt等(保留文件扩展名)此代码现在

import os, sys
path = input("input path: ")
dirs = os.listdir(path)
for i in range(0,len(dirs)):
   # capture the fully qualified path for the original file
   original_file = os.path.join(path, dirs[i])
   # Build the new file name as number . file extension
   # if there is no . in the file name, this code goes boom
   new_file = os.path.join(path, str(i) + '.' + original_file.split('.')[-1])

   print "Renaming {0} as {1}".format(original_file, new_file)
   os.rename(original_file, new_file)

使用Python 2.6.1验证

显示命令行中的相关位。您可以看到空文件bar.txt和foo.txt重命名为0和1

>>> path = input("Input path")
Input path"/Users/bfellows2/so"
>>> dirs = os.listdir(path)
>>> dirs
['bar.txt', 'foo.txt']
>>> for i in range(0,len(dirs)): 
...  os.rename(os.path.join(path, dirs[i]), str(i))
... 
>>> 
[1]+  Stopped                 python
Helcaraxe:so bfellows2$ ls -al
total 0
drwxr-xr-x    4 bfellows2  bfellows2   136 Sep  3 20:30 .
drwxr-xr-x  100 bfellows2  bfellows2  3400 Sep  3 20:24 ..
-rw-r--r--    1 bfellows2  bfellows2     0 Sep  3 20:24 0
-rw-r--r--    1 bfellows2  bfellows2     0 Sep  3 20:24 1
Helcaraxe:so bfellows2$ python -V
Python 2.6.1