鱼C论坛

 找回密码
 立即注册
查看: 2985|回复: 12

[已解决]请教一下字符串分割split问题

[复制链接]
发表于 2020-1-3 23:05:34 | 显示全部楼层 |阅读模式

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

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

x
在做小甲鱼29课视频中讲到的字符串分割
(name,speak)=each.split(':')
会报错:
(Traceback (most recent call last):
  File "C:/Users/Administrator/Desktop/29.py", line 7, in <module>
    (name,speak)=each.split(':')
ValueError: too many values to unpack (expected 2)
>>> )
但是我在shell中做的时候
>>> str1='小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”'
>>> (name,spoken)=str1.split(':')
>>> name
'小客服'
>>> spoken
'那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”'
>>>
却没有问题

初学Python 忘前辈解惑,谢谢
最佳答案
2020-1-4 16:40:03
microyiyi 发表于 2020-1-4 16:33
def save(boy,girl,count):
    boy_filename='boy_'+str(count)+'.txt'
    girl_filename='girl'+str ...

试试这样:

  1. def save(boy, girl, count):
  2.     boy_filename = 'boy_' + str(count) + '.txt'
  3.     girl_filename = 'girl' + str(count) + '.txt'
  4.     boyfile = open(boy_filename, 'w')
  5.     boyfile.writelines(boy)
  6.     girlfile = open(girl_filename, 'w')
  7.     girlfile.writelines(girl)
  8.     boyfile.close()
  9.     girlfile.close()


  10. def openfile(filename):
  11.     f = open(filename)
  12.     x = 1
  13.     boy = []
  14.     girl = []
  15.     for each in f:
  16.         if each[:6] != '======':
  17.             (name, speak) = each.split(':', 1)
  18.             if name == '小甲鱼':
  19.                 boy.append(speak)
  20.             elif name == '小客服':
  21.                 girl.append(speak)
  22.         else:
  23.             save(boy, girl, x)
  24.             boy = []
  25.             girl = []
  26.             x += 1
  27.         save(boy, girl, x)
  28.     f.close()


  29. openfile('F:\\【视频教学】零基础入门学习Python\\028文件:因为懂你,所以永恒\\record.txt')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-4 07:34:33 From FishC Mobile | 显示全部楼层
代码不全
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-4 08:16:50 | 显示全部楼层
把完整代码发上来。

另外楼主查看一下 record.txt 是否全为 {}:{} 或 ========= 的格式,不是立即修改(文件中不能有空行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-4 16:33:14 | 显示全部楼层
  1. def save(boy,girl,count):
  2.     boy_filename='boy_'+str(count)+'.txt'
  3.     girl_filename='girl'+str(count)+'.txt'
  4.     boyfile=open(boy_filename,'w')
  5.     boyfile.writelines(boy)
  6.     girlfile=open(girl_filename,'w')
  7.     girlfile.writelines(girl)
  8.     boyfile.close()
  9.     girlfile.close()

  10. def openfile(filename):
  11.     f=open(filename)
  12.     x=1
  13.     boy=[]
  14.     girl=[]
  15.     for each in f:
  16.         if each[:6]!='======':
  17.             (name,speak)=each.split(':')
  18.             if name=='小甲鱼':
  19.                 boy.append(speak)
  20.             elif name =='小客服':
  21.                 girl.append(speak)
  22.         else:
  23.             save(boy,girl,x)
  24.             boy=[]
  25.             girl=[]
  26.             x+=1
  27.         save(boy,girl,x)
  28.     f.close()

  29. openfile('F:\\【视频教学】零基础入门学习Python\\028文件:因为懂你,所以永恒\\record.txt')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-4 16:33:59 | 显示全部楼层
zltzlt 发表于 2020-1-4 08:16
把完整代码发上来。

另外楼主查看一下 record.txt 是否全为 {}:{} 或 ========= 的格式,不是立即修改( ...

def save(boy,girl,count):
    boy_filename='boy_'+str(count)+'.txt'
    girl_filename='girl'+str(count)+'.txt'
    boyfile=open(boy_filename,'w')
    boyfile.writelines(boy)
    girlfile=open(girl_filename,'w')
    girlfile.writelines(girl)
    boyfile.close()
    girlfile.close()

def openfile(filename):
    f=open(filename)
    x=1
    boy=[]
    girl=[]
    for each in f:
        if each[:6]!='======':
            (name,speak)=each.split(':')
            if name=='小甲鱼':
                boy.append(speak)
            elif name =='小客服':
                girl.append(speak)
        else:
            save(boy,girl,x)
            boy=[]
            girl=[]
            x+=1
        save(boy,girl,x)
    f.close()

openfile('F:\\【视频教学】零基础入门学习Python\\028文件:因为懂你,所以永恒\\record.txt')
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-4 16:40:03 | 显示全部楼层    本楼为最佳答案   
microyiyi 发表于 2020-1-4 16:33
def save(boy,girl,count):
    boy_filename='boy_'+str(count)+'.txt'
    girl_filename='girl'+str ...

试试这样:

  1. def save(boy, girl, count):
  2.     boy_filename = 'boy_' + str(count) + '.txt'
  3.     girl_filename = 'girl' + str(count) + '.txt'
  4.     boyfile = open(boy_filename, 'w')
  5.     boyfile.writelines(boy)
  6.     girlfile = open(girl_filename, 'w')
  7.     girlfile.writelines(girl)
  8.     boyfile.close()
  9.     girlfile.close()


  10. def openfile(filename):
  11.     f = open(filename)
  12.     x = 1
  13.     boy = []
  14.     girl = []
  15.     for each in f:
  16.         if each[:6] != '======':
  17.             (name, speak) = each.split(':', 1)
  18.             if name == '小甲鱼':
  19.                 boy.append(speak)
  20.             elif name == '小客服':
  21.                 girl.append(speak)
  22.         else:
  23.             save(boy, girl, x)
  24.             boy = []
  25.             girl = []
  26.             x += 1
  27.         save(boy, girl, x)
  28.     f.close()


  29. openfile('F:\\【视频教学】零基础入门学习Python\\028文件:因为懂你,所以永恒\\record.txt')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-4 16:49:25 | 显示全部楼层

是的 加了(':',1)就可以了,但是我在shell下做的时候
默认参数就可以,不知道为什么函数里不可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-4 16:50:46 | 显示全部楼层
microyiyi 发表于 2020-1-4 16:49
是的 加了(':',1)就可以了,但是我在shell下做的时候
默认参数就可以,不知道为什么函数里不可以了

发个截图上来呗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-4 16:54:03 | 显示全部楼层

附图

本帖最后由 microyiyi 于 2020-1-4 16:55 编辑

附图
无标题.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-4 16:57:58 | 显示全部楼层

这句话没问题,可是下面这句话就有问题了。

  1. 小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
复制代码


1.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-4 17:03:37 | 显示全部楼层
zltzlt 发表于 2020-1-4 16:57
这句话没问题,可是下面这句话就有问题了。

哦 我明白了 是因为我在shel里的这句话中只有一个":"
所以默认参数就可以,但是要是有两个":"就需要告诉split 函数从第几个":"开始分割,是这个意思吧....
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-4 17:04:53 | 显示全部楼层
microyiyi 发表于 2020-1-4 17:03
哦 我明白了 是因为我在shel里的这句话中只有一个":"
所以默认参数就可以,但是要是有两个":"就需要告诉s ...

不是。如果有两个 : 就会分割两次,产生 3 个元素,而我们只想让他分割一次,产生 2 个元素,所以要加 , 1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-4 17:12:40 | 显示全部楼层
zltzlt 发表于 2020-1-4 17:04
不是。如果有两个 : 就会分割两次,产生 3 个元素,而我们只想让他分割一次,产生 2 个元素,所以要加 ,  ...

好的 明白了 多谢多谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-1 14:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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