鱼C论坛

 找回密码
 立即注册
查看: 3046|回复: 9

python-30讲-0.统计当前目录下每个文件类型的文件数,修改后报‘无效语法‘

[复制链接]
发表于 2014-8-6 23:32:26 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 欣欣celin 于 2014-8-9 23:16 编辑

  1. import os
  2. def countF(fPath):
  3.       allFiles = os.listdir(os.curdir)
  4.       #使用os.curdir表示当前目录更标准
  5.       typeDict = dict()

  6.       for eachFile in allFiles:
  7.           if os.path.isdir(eachFile):#判断指定路径是否存在且是一个目录
  8.                typeDict.setdefault(fPath, 0)
  9.                typeDict[fPath] += 1
  10.           else:
  11.                ext = os.path.splitext(eachFile)[1]
  12.                typeDict.setdefault(ext, 0)
  13.                typeDict[ext] += 1

  14.       for eachType in typeDict.keys():
  15.               print('该文件夹下共有类型为[.%s]的文件%d个', % (eachType, typeDict[eachType]))

  16. fPath = str(input('请输入路径'))
  17. def countF(fPath)
复制代码
以上运行时报‘无效语法’,何解??

最佳答案

查看完整内容

这么改就对了 。。。 无视那个try 和 except PermissionError 因为有的文件需要权限打开,打不开就报错 用try 防止异常 你看到异常那课就知道了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-6 23:32:27 | 显示全部楼层
欣欣celin 发表于 2014-8-9 22:15
恩,
想统计传入路径的文件类型
得先用 os.chdir() 改变工作目录。。
  1. import os
  2. def countF(fPath):
  3.    
  4.     os.chdir(fPath)
  5.     typeDict = dict()
  6.     try:
  7.         for eachFile in os.listdir(os.curdir):
  8.             if os.path.isdir(eachFile):
  9.                 countF(eachFile)
  10.                 os.chdir(os.pardir)
  11.             else:
  12.                 ext = os.path.splitext(eachFile)[1]
  13.                 typeDict.setdefault(ext, 0)
  14.                 typeDict[ext] += 1
  15.     except PermissionError :
  16.         pass
  17.     for eachType in typeDict.keys():
  18.         print('该文件夹下共有类型为[.%s]的文件%d个' % (eachType, typeDict[eachType]))

  19. fPath = str(input('请输入路径'))
  20. countF(fPath)
复制代码


这么改就对了 。。。
无视那个try 和 except PermissionError
因为有的文件需要权限打开,打不开就报错 用try 防止异常 你看到异常那课就知道了。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-7 02:31:31 | 显示全部楼层
18行 把 print的逗号去掉
21行 把def去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-7 22:22:36 | 显示全部楼层
墙角君 发表于 2014-8-7 02:31
18行 把 print的逗号去掉
21行 把def去掉

谢谢大虾,我想通过修改鱼鱼的代码,实现统计输入的任意路径文件夹的文件类型和数量
allFiles = os.listdir(os.curdir)
但当把18,21行修正,并把以上一句,改成这样之后
allFiles = os.listdir(fPath)  

无论传入什么路径,它都只统计当前文件夹??为什么呢??{:7_154:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 02:09:54 | 显示全部楼层
欣欣celin 发表于 2014-8-7 22:22
谢谢大虾,我想通过修改鱼鱼的代码,实现统计输入的任意路径文件夹的文件类型和数量
allFiles = os.list ...

额。是第30课作业吧。。。
这个问题的答案就是只统计当前目录下的文件类型。。
0. 编写一个程序,统计当前目录下每个文件类型的文件数。

如果你想统计传入路径的文件类型
得先用 os.chdir() 改变工作目录。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 10:48:50 | 显示全部楼层
18行 把 print的逗号去掉
21行 把def去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 10:49:37 | 显示全部楼层
墙角君 发表于 2014-8-8 02:09
额。是第30课作业吧。。。
这个问题的答案就是只统计当前目录下的文件类型。。
0. 编写一个程序,统计 ...

楼上正解把,我试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 11:12:11 | 显示全部楼层
18行 把 print的逗号去掉
21行 把def去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-8 15:24:24 | 显示全部楼层

18行 把 print的逗号去掉
21行 把def去掉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-9 22:15:57 | 显示全部楼层
墙角君 发表于 2014-8-8 02:09
额。是第30课作业吧。。。
这个问题的答案就是只统计当前目录下的文件类型。。
0. 编写一个程序,统计 ...

恩,
想统计传入路径的文件类型
得先用 os.chdir() 改变工作目录。。
====修改后:(请看蓝字
import os
def countF(fPath):
    allFiles = os.listdir(os.chdir(fPath))   #是这样改吗??运行报错‘EOL while scanning string literal’
    typeDict = dict()

    for eachFile in allFiles:
        if os.path.isdir(eachFile):#判断指定路径是否存在且是一个目录
            typeDict.setdefault(fPath, 0)
            typeDict[fPath] += 1
        else:
            ext = os.path.splitext(eachFile)[1]
            typeDict.setdefault(ext, 0)
            typeDict[ext] += 1

    for eachType in typeDict.keys():
        print('该文件夹下共有类型为[.%s]的文件%d个' % (eachType, typeDict[eachType]))

fPath = str(input('请输入路径'))
countF(fPath)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 18:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表