os.prth.isdir在非本py文件所在文件夹下判断失误问题
import oswhile 1:
file1 = input("请输入要统计的文件夹路径【按F退出】:")
differ = []
file_x = {}
if file1 != "F":
file2 = os.listdir(file1)
for f in file2:
if os.path.isdir(f):
differ.append(f)
else:
f1 = os.path.splitext(f)
file_x.setdefault(f1,0)
file_x += 1
print("该文件夹下共有类型为【文件夹】的文件%d个"%len(differ))
for i in file_x.keys():
print("该文件夹下共有类型为【%s】的文件%d个"%(i,file_x))
else:
break
input()
如上这条代码,统计文件夹下的文件类型及其数量,当要判断的文件夹是该py文件纯在的文件夹时,
if os.path.isdir(f):
differ.append(f)
正常运行。当py文件不在这一文件夹下时统计的文件夹数量为0,对应的会多出一个"该文件夹下共有类型为【】的文件x个"
这是为什么 加个判断
if os.listdir('你的path') != []:
do something 本帖最后由 深山小兽 于 2020-10-24 23:44 编辑
可以再把问题描述清楚一点吗?不是很明白你的意思?像这种统计文件夹和文件个数的情况建议用字典会比较好点! 非当前目录的情况下,你要把完整的路径参数传给isdir函数,不能只给文件名,否则它就是在当前目录判断的,会出错。 hrp 发表于 2020-10-24 23:51
非当前目录的情况下,你要把完整的路径参数传给isdir函数,不能只给文件名,否则它就是在当前目录判断的, ...
我就是传入完整的目录,没传完整目录会报错的吧,我不是报错,是他判断出错了 灵魂溢出 发表于 2020-10-25 09:06
我就是传入完整的目录,没传完整目录会报错的吧,我不是报错,是他判断出错了
不,你没有
import os
while 1:
file1 = input("请输入要统计的文件夹路径【按F退出】:")
differ = []
file_x = {}
if file1 != "F":
# listdir 得到的是文件名、文件夹名列表,不包含路径
file2 = os.listdir(file1)
for f in file2:
# 给isdir传入完整路径参数
# 此时 f 是文件名, file1 是你输入的文件夹路径
# 你需要把文件夹路径和文件名拼接成完整路径,作为参数传给 isdir 函数
if os.path.isdir(os.path.join(file1, f)):
differ.append(f)
else:
f1 = os.path.splitext(f)
file_x.setdefault(f1, 0)
file_x += 1
print("该文件夹下共有类型为【文件夹】的文件%d个" % len(differ))
for i in file_x.keys():
print("该文件夹下共有类型为【%s】的文件%d个" % (i, file_x))
else:
break
input()
hrp 发表于 2020-10-25 09:19
不,你没有
emmmm,原来问题在这,谢谢大佬{:5_106:} import os
while 1:
file1 = input("请输入要统计的文件夹路径【按F退出】:")
differ = []
file_x = {}
if file1 != "F":
file2 = os.listdir(file1) # file2只包含文件名和文件夹名,不包含完整路径名
for f in file2:
if os.path.isdir(f): #如果在当前目录下,也就是py文件所在目录下,可以正确判断是否是文件夹,但是如果不在当前目录下,因为不包含完整路径,只会判断为False,会执行else,就出现你说的问题,多了一堆的【】
differ.append(f)
else:
f1 = os.path.splitext(f)
file_x.setdefault(f1,0)
file_x += 1
print("该文件夹下共有类型为【文件夹】的文件%d个"%len(differ))
for i in file_x.keys():
print("该文件夹下共有类型为【%s】的文件%d个"%(i,file_x))
else:
break
input()
这样改一下就可以了:
import os
while 1:
file1 = input("请输入要统计的文件夹路径【按F退出】:")
differ = []
file_x = {}
if file1 != "F":
file2 = os.listdir(file1)
for f in file2:
if os.path.isdir(os.path.join(file1,f)): #转换成完整路径名
differ.append(f)
else:
f1 = os.path.splitext(f)
file_x.setdefault(f1,0)
file_x += 1
print("该文件夹下共有类型为【文件夹】的文件%d个"%len(differ))
for i in file_x.keys():
print("该文件夹下共有类型为【%s】的文件%d个"%(i,file_x))
else:
break
input()
txxcat 发表于 2020-10-25 09:47
这样改一下就可以了:
谢谢,上一层楼主已经解决了 本帖最后由 深山小兽 于 2020-10-26 13:10 编辑
来晚了。你还可以通过改变工作目录的方式解决问题,并不需要把路径加进去也能解决。关键点不是路径,而在于工作目录。建议你使用os.chdir("工作目录file1")。昨晚上不知道你问的什么,所以没法回答。
import os
while 1:
file1 = input("请输入要统计的文件夹路径【按F退出】:")
os.chdir(file1)# 把这句加进去就能解决代码的问题
differ = []
file_x = {}
if file1 != "F":
file2 = os.listdir(file1)
for f in file2:
if os.path.isdir(f):
differ.append(f)
else:
f1 = os.path.splitext(f)
file_x.setdefault(f1,0)
file_x += 1
print("该文件夹下共有类型为【文件夹】的文件%d个"%len(differ))
for i in file_x.keys():
print("该文件夹下共有类型为【%s】的文件%d个"%(i,file_x))
else:
break
input()
页:
[1]