我只是想编写一个小应用程序,它从名为'DATA.DAT'的文件中获取值,并使用该值重命名包含该文件的文件夹。
.py脚本在另一个文件夹中运行,并允许用户定义路径。为了让您更好地了解,用户定义的路径必须类似于(在Mac上)'/ Users / User / Desktop / FOLDER'和'FOLDER'应该包含'DATA.DAT'。
这就是源代码的一小部分:
try:
data = open('DATA.DAT').read()
data_data = data[12:17]
path_paths = path.rsplit('/')
basepath = '/'.join(path_paths[:-1])
chdir(basepath)
if path_paths[-1] <> data_data:
rename(path_paths[-1], data_data)
raw_input('Folder name has been corrected! Thank you.')
quit()
else:
print('Folder name was already correct! Thank you.')
quit()
except IndexError:
raw_input('ERROR!')
quit()
嗯,它有效;但是当'FOLDER'包含多个文件时它会引发异常(实际上,'FOLDER'应该只包含'DATA.DAT'和其他文件夹。这不会产生问题。)...
Traceback (most recent call last):
File "/Users/User/Desktop/example.py", line 72, in <module>
rename(path_paths[-1], data_data)
OSError: [Errno 66] Directory not empty
为了防止这种情况发生,有没有办法解决这个问题?感谢。
答案 0 :(得分:14)
修改:正确的工具是shutil.move
:
shutil.move(path_paths[-1], data_data)
假设path_paths[-1]
是您要重命名的绝对目录,data_data
是您要将其重命名为的绝对目录名。
目标目录必须不存在才能生效。这两个位置不需要位于同一个文件系统上。
旧答案:使用os.renames
代替os.rename
。
它将递归创建任何所需的目录。
答案 1 :(得分:1)
使用shutil
要容易得多。
答案 2 :(得分:0)
十年后,..可能会取代分割路径的方式
path_paths = path.rsplit('/')
为
path_paths = os.path.split(path)[1]
对于重命名问题:
os.rename('myfolder/oldname', 'myfolder/newname')