鱼C论坛

 找回密码
 立即注册
查看: 1470|回复: 6

[已解决]文件名的分割方法

[复制链接]
发表于 2018-4-23 22:54:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
零基础入门学习Python 的第30课后第一题,想到有两种方法。
第一种方法如下,运行成功。
import os
import os.path

a = 0
b = 0
c = 0
d = 0
e = 0

for each in os.listdir(r'C:\Python'):
    (name, form) = os.path.splitext(each)
   
    if form == '.txt':
        a += 1
    if form == '.png':
        b += 1
    if form == '.py':
        c += 1
    if form == '.docx':
        d += 1
    if form == '':
        e += 1

print('该文件夹下共有类型为【.txt】的文件' + str(a) + '个')
print('该文件夹下共有类型为【.png】的文件' + str(b) + '个')
print('该文件夹下共有类型为【.py】的文件' + str(c) + '个')
print('该文件夹下共有类型为【.docx】的文件' + str(d) + '个')
print('该文件夹下共有类型为【文件夹】的文件' + str(e) + '个')

第二种方法受第29课后习题的启发,在文件名和文件类型分割时,稍微改动了一下,就运行不成功,自己想了半天也没想明白,求大神帮忙,代码如下:
import os
import os.path

a = 0
b = 0
c = 0
d = 0
e = 0

for each in os.listdir(r'C:\Python'):
    (name, form) = each.split('.',1)
   
    if form == 'txt':
        a += 1
    if form == 'png':
        b += 1
    if form == 'py':
        c += 1
    if form == 'docx':
        d += 1
    if form == '':
        e += 1

print('该文件夹下共有类型为【.txt】的文件' + str(a) + '个')
print('该文件夹下共有类型为【.png】的文件' + str(b) + '个')
print('该文件夹下共有类型为【.py】的文件' + str(c) + '个')
print('该文件夹下共有类型为【.docx】的文件' + str(d) + '个')
print('该文件夹下共有类型为【文件夹】的文件' + str(e) + '个')

总是报错
Traceback (most recent call last):
  File "C:/Users/AndyL/AppData/Local/Programs/Python/Python36/Python.30_1_2.py", line 11, in <module>
    (name, form) = each.split('.',1)
ValueError: not enough values to unpack (expected 2, got 1)


最佳答案
2018-4-24 09:05:13
https://stackoverflow.com/questions/10391963/valueerror-need-more-than-1-value-to-unpack-python
你的 (name, form) = each.split('.',1)这句有问题,当each是个文件夹的时候,你split只能得到一个变量,却想赋给两个变量,就出现这种情况了。解决办法是你可以判断len(each.split('.',1)) == 1或者2进行下一步统计(split返回的是一个list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-24 09:05:13 | 显示全部楼层    本楼为最佳答案   
https://stackoverflow.com/questions/10391963/valueerror-need-more-than-1-value-to-unpack-python
你的 (name, form) = each.split('.',1)这句有问题,当each是个文件夹的时候,你split只能得到一个变量,却想赋给两个变量,就出现这种情况了。解决办法是你可以判断len(each.split('.',1)) == 1或者2进行下一步统计(split返回的是一个list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 09:05:14 | 显示全部楼层
hi  原因如下

(name, form) = each.split('.',1) 处理上存在局限,如果目标文件夹下 有 子文件夹 或 没有后缀名的文件(即,不包含.) , 就会触发报错not enough values to unpack (expected 2, got 1),因为程序没有找到 '.'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 09:05:41 | 显示全部楼层
如果遇到的是文件名,没有后缀名,就无法用split('.',1)进行分割,因为找不到这个字符 .
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-24 09:51:32 | 显示全部楼层
(name, form) = each.split('.',1)
ValueError: not enough values to unpack (expected 2, got 1)
没有足够的数值去取出。说明split没有找到‘.’没有进行分片操作
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-24 14:34:24 | 显示全部楼层
machinism 发表于 2018-4-24 09:05
https://stackoverflow.com/questions/10391963/valueerror-need-more-than-1-value-to-unpack-python
你 ...

谢谢!不仅指出问题还提出解决方案,新的代码如下,运行成功!
import os
import os.path

a = 0
b = 0
c = 0
d = 0
e = 0

for each in os.listdir(r'C:\Python'):
    if len(each.split('.',1)) == 2:
        (name, form) = each.split('.', 1)
        if form == 'txt':
            a += 1
        if form == 'png':
            b += 1
        if form == 'py':
            c += 1
        if form == 'docx':
            d += 1
    else:
        e += 1

print('该文件夹下共有类型为【.txt】的文件' + str(a) + '个')
print('该文件夹下共有类型为【.png】的文件' + str(b) + '个')
print('该文件夹下共有类型为【.py】的文件' + str(c) + '个')
print('该文件夹下共有类型为【.docx】的文件' + str(d) + '个')
print('该文件夹下共有类型为【文件夹】的文件' + str(e) + '个')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-24 14:35:24 | 显示全部楼层
谢谢各位的支持,要是能多列几个最佳答案我会把你们都列上
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 03:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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