鱼C论坛

 找回密码
 立即注册
查看: 2519|回复: 11

029- (s,h)=each_line.split(':',1) 这句话什么意思?为什么会报错?

[复制链接]
发表于 2016-4-11 10:47:29 | 显示全部楼层 |阅读模式

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

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

x
029-视频中的内容-   (s,h)=each_line.split(':',1)   小甲鱼在视频里使用的这行代码为什么我的Python3.4.3 会报错呢?而且我也不明白这行代码代表的是什么意思?
我只知道 .split(':',1) 会把一段字符串里的“:” 删掉 1 次 ,然后左右分割,生成一个序列 [ ‘:左边的字符串’,‘:右边的字符串’]   至于这个新生成的序列 为什么能赋值给 (s,h) 这个元组,我很不明白,而且程序居然还报错,可是小甲鱼演示的时候并没有报错呀~

程序代码-(这是我把 参数名字简化后的代码)
  1. m='''小客服:小甲鱼,今天有客户问你有没有女朋友?
  2. 小甲鱼:咦??
  3. 小客服:我跟她说你有女朋友了!
  4. 小甲鱼:。。。。。。
  5. 小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
  6. 小甲鱼:然后呢?
  7. 小客服:她买了两个,说发一个货就好~
  8. 小甲鱼:呃。。。。。。你真牛!
  9. 小客服:那是,谁让我是鱼C最可爱小客服嘛~
  10. 小甲鱼:下次有人想调戏你我不阻止~
  11. 小客服:滚!!!
  12. ========================================'''
  13. boy=[]
  14. girl=[]


  15. for i in m:
  16.     if(i[:6]!='======'):
  17.         (s,h)=i.split(':',1)
  18.         if(s=='小甲鱼'):
  19.             boy.append(h)
  20.         if(s=='小客服'):
  21.             girl.append(h)
  22.             
  23. print('boy ',boy)
  24. print('girl ',girl)
复制代码


运行结果(报错)
  1. >>>
  2. Traceback (most recent call last):
  3.   File "C:/Users/Administrator/Desktop/028-5-(测试:).py", line 19, in <module>
  4.     (s,h)=i.split(':',1)
  5. ValueError: need more than 1 value to unpack
复制代码


希望大神指点迷津~

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-4-11 11:09:23 | 显示全部楼层
for i in m: 不会一行行的取值,只能一个个字符读取,第一次读到“小”,无法分隔。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-11 11:41:28 | 显示全部楼层
冬雪雪冬 发表于 2016-4-11 11:09
for i in m: 不会一行行的取值,只能一个个字符读取,第一次读到“小”,无法分隔。

我刚刚又试了一下,把字符串以文件的形式打开就不会报错了,
而且我发现,在 打开文件的模式下(m=open( ) ), for i in m:  是以 一行 为单位进行循环的,
         i.split(':',1) 只会对一行里的第一个“:”进行分割

而如果直接将 m=字符串 , for i in m:   则会以每个字符串进行循环
我这样理解对吗?

程序代码-(m=open( ),for i in m: )
  1. m=open(r'C:\Users\Administrator\Desktop\record.txt')
  2. boy=[]
  3. girl=[]

  4. for i in m:
  5.     if(i[:6]!='======'):
  6.         (s,h)=i.split(':',1)
  7.         print(s);print(h)

  8.         if(s=='小甲鱼'):
  9.             boy.append(h)
  10.         if(s=='小客服'):
  11.             girl.append(h)
  12.     else:
  13.         print('boy ',boy)
  14.         print('girl ',girl)

  15. m.close()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-11 11:47:54 | 显示全部楼层
宝贝归来 发表于 2016-4-11 11:41
我刚刚又试了一下,把字符串以文件的形式打开就不会报错了,
而且我发现,在 打开文件的模式下(m=open( ...

是的,读取文件for循环是以行为单位的,读取字符串for循环是以字符为单位的。如果要使字符串的正确,可将字符串用split以换行符为界分割成列表,再for循环。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
宝贝归来 + 5 + 5 + 3 感谢楼主无私奉献!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2016-4-11 12:26:16 | 显示全部楼层
冬雪雪冬 发表于 2016-4-11 11:47
是的,读取文件for循环是以行为单位的,读取字符串for循环是以字符为单位的。如果要使字符串的正确,可将 ...

刚刚我在 为 文件命名 的时候又遇到了问题
小甲鱼在 给文件命名的时候,没有指定路径,所以文件直接生成在同一个文件夹里
但如果我想给命名的文件,指定一个保存的路径的话,该怎么做呢?
小甲鱼-程序(未指定保存路径)
  1. file_name_boy = 'boy_' + str(count) + '.txt'
  2. boy_file = open(file_name_boy, 'w')  #这里没有指定路径
复制代码


我的程序-(指定保存路径)-(但报错)
  1. name_boy='boy_'+str(C)+'.txt'
  2. f1=open(r'C:\Users\Administrator\Desktop'\name_boy,'w')  #这个报错,即便是 \\name 也不行
  3. f1=open(r'C:\Users\Administrator\Desktop\name_boy','w')  #这个不报错,但只能生成1个叫 name_boy 的文件
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-11 13:42:25 | 显示全部楼层
宝贝归来 发表于 2016-4-11 12:26
刚刚我在 为 文件命名 的时候又遇到了问题
小甲鱼在 给文件命名的时候,没有指定路径,所以文件直接生成 ...

03.写法是正确的,如果要扩展名,在后面加上.txt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-4-11 19:06:35 | 显示全部楼层
冬雪雪冬 发表于 2016-4-11 13:42
03.写法是正确的,如果要扩展名,在后面加上.txt

01 那一行是一个名字生成的公式:  name_boy='boy_'+str(C)+'.txt'  这个公式可以生成(boy_1.txt   boy_2.txt     boy_3.txt ) 把这些不一样的名字都赋值给   name_boy  ,
我想问的是,这个被赋值的name_boy  如何带入到路径里面?  

不然的话,就会像 03 一样,只能生成一个 name_boy  的文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-4-11 20:00:36 | 显示全部楼层
宝贝归来 发表于 2016-4-11 19:06
01 那一行是一个名字生成的公式:  name_boy='boy_'+str(C)+'.txt'  这个公式可以生成(boy_1.txt   boy_2 ...

name_boy='boy_'+str(C)+'.txt'
f1=open(r'C:\Users\Administrator\Desktop' + '\\' + name_boy,'w')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-1-14 19:25:45 | 显示全部楼层
冬雪雪冬 发表于 2016-4-11 20:00
name_boy='boy_'+str(C)+'.txt'
f1=open(r'C:%users\Administrator\Desktop' + '\\' + name_boy,'w')

版主技术好还又热心!表示看了有帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-14 19:29:05 | 显示全部楼层
冬雪雪冬 发表于 2016-4-11 13:42
03.写法是正确的,如果要扩展名,在后面加上.txt

这节视频中,小甲鱼老师一开始就写了这行:
f = open('record.txt')
没有指定record.txt文件的路径,是因为环境变量,还是哪里设置什么默认的根路径了?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-14 19:38:54 | 显示全部楼层
笑梦灵 发表于 2017-1-14 19:29
这节视频中,小甲鱼老师一开始就写了这行:
f = open('record.txt')
没有指定record.txt文件的路径,是 ...

如果数据文件与你的py程序文件在一个文件夹,就可以不写路径。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-1-14 19:52:47 | 显示全部楼层
冬雪雪冬 发表于 2017-1-14 19:38
如果数据文件与你的py程序文件在一个文件夹,就可以不写路径。

恩恩,知道了,谢谢版主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 14:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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