我正在编写一个 Python 函数来将文件列表的扩展名更改为另一个扩展名,例如将 txt 更改为 rar,这只是一个闲置示例。但我收到一个错误。代码是:
import os
def dTask():
#Get a file name list
file_list = os.listdir('C:\Users\B\Desktop\sil\sil2')
#Change the extensions
for file_name in file_list:
entry_pos = 0;
#Filter the file name first for '.'
for position in range(0, len(file_name)):
if file_name[position] == '.':
break
new_file_name = file_name[0:position]
#Filtering done !
#Using the name filtered, add extension to that name
new_file_name = new_file_name + '.rar'
#rename the entry in the file list, using new file name
print 'Expected change from: ', file_list[entry_pos]
print 'into File name: ', new_file_name
os.rename(file_list[entry_pos], new_file_name)
++entry_pos
Error:
>>> dTask()
Expected change from: New Text Document (2).txt
into File name: New Text Document (2).rar
Traceback (most recent call last):
File "<pyshell#10>", line 1, in <module>
dTask()
File "C:\Users\B\Desktop\dTask.py", line 19, in dTask
os.rename(file_list[entry_pos], new_file_name)
WindowsError: [Error 2] The system cannot find the file specified
正如您在打印输出中看到的那样,我可以在变量级别成功获取具有另一个扩展名的文件名,但实际上不是,因为我无法在操作系统级别结束此过程。错误来自 os.rename(...)。知道如何解决这个问题吗?
请您参考如下方法:
正如其他人已经指出的那样,您需要提供这些文件的路径或切换当前工作目录以便操作系统可以找到这些文件。
++entry_pos什么都不做。 Python 中没有增量运算符。前缀+正好与前缀-对称。用两个+作为前缀只是两个空操作。所以您实际上没有做任何事情(并且在将其更改为entry_pos += 1之后,您仍然在每次迭代中将其重置为零。此外,您的代码非常不优雅 - 例如,您对
file_list使用了单独的索引,并且未能使它与迭代变量file_name保持同步>,即使你可以只使用那个!展示如何更好地做到这一点。
-
def rename_by_ext(to_ext, path):
if to_ext[0] != '.':
to_ext = '.'+to_ext
print "Renaming files in", path
for file_name in os.listdir(path):
root, ext = os.path.splitext(file_name)
print "Renaming", file_name, "to", root+ext
os.rename(os.path.join(path, file_name), os.path.join(path, root+to_ext))
rename_by_ext('.rar', '...')
