这段代码是要求一个目录,然后列出该目录中的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'
答案 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