灵魂溢出 发表于 2020-10-24 22:56:54

os.prth.isdir在非本py文件所在文件夹下判断失误问题

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(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个"
这是为什么

聂嘉辉 发表于 2020-10-24 23:11:12

加个判断
if os.listdir('你的path') != []:
    do something

深山小兽 发表于 2020-10-24 23:39:11

本帖最后由 深山小兽 于 2020-10-24 23:44 编辑

可以再把问题描述清楚一点吗?不是很明白你的意思?像这种统计文件夹和文件个数的情况建议用字典会比较好点!

hrp 发表于 2020-10-24 23:51:32

非当前目录的情况下,你要把完整的路径参数传给isdir函数,不能只给文件名,否则它就是在当前目录判断的,会出错。

灵魂溢出 发表于 2020-10-25 09:06:11

hrp 发表于 2020-10-24 23:51
非当前目录的情况下,你要把完整的路径参数传给isdir函数,不能只给文件名,否则它就是在当前目录判断的, ...

我就是传入完整的目录,没传完整目录会报错的吧,我不是报错,是他判断出错了

hrp 发表于 2020-10-25 09:19:21

灵魂溢出 发表于 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()

灵魂溢出 发表于 2020-10-25 09:20:55

hrp 发表于 2020-10-25 09:19
不,你没有

emmmm,原来问题在这,谢谢大佬{:5_106:}

txxcat 发表于 2020-10-25 09:47:05

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()

灵魂溢出 发表于 2020-10-25 15:50:03

txxcat 发表于 2020-10-25 09:47
这样改一下就可以了:

谢谢,上一层楼主已经解决了

深山小兽 发表于 2020-10-26 13:08:50

本帖最后由 深山小兽 于 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]
查看完整版本: os.prth.isdir在非本py文件所在文件夹下判断失误问题