Pythonos模块中的isfile()和isdir()函数均返回false
问题解决⽅法
今天在写⼀个linux下⾃动备份指定⽬录下的所有⽬录的脚本时,遇到了⼀个问题,由于我是需要备份⽬录,所以,需要判断扫描的⽂件是否为⽬录,当我⽤os.path.isdir()来判断的时候,发现所有⽂件均返回false,刚开始以为是系统兼容性问题,进⼀步测试,发现⽤os.path.isfile(),这些⽂件还是返回false,这肯定就是程序写的有问题了,代码如下:
false是什么函数#!/usr/bin/env python
# a python script to auto backup a directory's file by Hito
import os
Directory=raw_input("Please enter directory you want to backup:")
dirs=os.listdir(Directory)
for filename in dirs:
if os.path.isdir(filename):
os.system("tar czvf "+filename+". "+filename)
经过仔细排查,在上⾯的for/in循环中,filename实际上只是⼀个⽂件名。测试发现,当我使⽤os.path.isdir(⽬录的绝对路径)的时候,返回的才是true,也就是说,python的isdir()并不像php的is_dir()那样,可以使⽤当前⼯作⽬录的相对路径,那么这⾥怎么样去改进这个备份⽂件呢?幸好python提供了⼀个os.path.join()函数,⾃动来把需要的路径加到⼀块,⽽不⽤担⼼⼿动把路径字符串连接起来时,产⽣多余的”/”的问题,那么这个备份脚本可以这样写:
#!/usr/bin/env python
# a python script to auto backup a directory's file by Hito
import os
Directory=raw_input("Please enter directory you want to backup:")
dirs=os.listdir(Directory)
for filename in dirs:
fulldirfile=os.path.join(Directory,filename)
if os.path.isdir(fulldirfile):
os.system("tar czvf "+fulldirfile+". "+fulldirfile)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。