鱼C论坛

 找回密码
 立即注册
查看: 887|回复: 17

[已解决]for遍历文本问题

[复制链接]
发表于 2020-4-17 14:57:27 | 显示全部楼层 |阅读模式

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

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

x
使用for循环遍历一个文本的数据,是遍历的字符吗,在小甲鱼Python0基础29讲当中,if each_line[:6]是什么意思 ,我看这是判断长度为6的一个数组
#打开record.txt文件f = open('E:\\python\\record.txt')  #定义3个变量,并对它们初始化boy = []     girl = []count = 0#循环读取文件for each_line in f:    #如果当前内容不"======",则继续读取内容;否则读取,开始写操作  if each_line[:6] != "======":                    #读取的内容以":"进行分割,分割后分别赋值给元组元素role和spoken    (role,spoken) = each_line.split(':',1)         #如果对话角色为"小甲鱼",则将文件追加到boy列表中    if role == '小甲鱼':                         boy.append(spoken)           #如果对话角色为"小客服",则将文件追加到girl列表中    if role == '小客服':                          girl.append(spoken)  else:     #定义输出文件名称     file_name_boy = 'boy_'+str(count)+'.txt'       file_name_girl = 'girl'+str(count)+'.txt'          #打开文件     boy_file = open(file_name_boy,'w')              girl_file = open(file_name_girl,'w')               #writelines的参数是序列(比如列表),它会迭代帮你写入文件。     boy_file.writelines(boy)          girl_file.writelines(girl)           #关闭文件对象     boy_file.close()                                        girl_file.close()                                    #当前写操作完毕后,必须进行初始化操作,以准备下一个的写入操作     boy = []     girl = []     count += 1#因为第三段对话的结尾没有"===",所以需要再次进行上门的重复写操作,保存第三段对话#定义输出文件名称     file_name_boy = 'boy_'+str(count)+'.txt'  file_name_girl = 'girl'+str(count)+'.txt'  #打开文件    boy_file = open(file_name_boy,'w')         girl_file = open(file_name_girl,'w') #writelines的参数是序列(比如列表),它会迭代帮你写入文件。     boy_file.writelines(boy)   girl_file.writelines(girl) #关闭文件对象      boy_file.close()                                girl_file.close()                    #关闭文件对象f.close()   
最佳答案
2020-4-17 16:29:46
czh1303541051 发表于 2020-4-17 16:14
这样确实是按行读取,原理能解释一下吗,不然我真有点接受不了,for遍历是按字符来的,这突然来个按行来 ...

迭代的特性,以后会学到,现在不用要求一定理解。for只有对字符串迭代的时候才是按字符来的,对列表、元素、字典、集合是按元素来的,其实你可以理解为:字符串是以字符为元素组成的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-17 15:00:49 | 显示全部楼层
?????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-17 15:04:08 | 显示全部楼层
each_line[:6],each_line是读出文本文件的每一行,是个字符串,[:6]是对字符串进行分片,取前6个字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-17 15:04:25 | 显示全部楼层
没粘贴好  太乱了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 15:05:09 | 显示全部楼层
还有,发代码用代码模式,就是图标中的一对尖括号。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-17 15:06:43 | 显示全部楼层
txxcat 发表于 2020-4-17 15:04
each_line[:6],each_line是读出文本文件的每一行,是个字符串,[:6]是对字符串进行分片,取前6个字符。

这意思是ecah_line是一个关键字?不是随意命名得吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 15:09:32 | 显示全部楼层
czh1303541051 发表于 2020-4-17 15:06
这意思是ecah_line是一个关键字?不是随意命名得吗

不是,随便取名,象我一般喜欢for i in xxxx。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-17 15:11:55 | 显示全部楼层
txxcat 发表于 2020-4-17 15:09
不是,随便取名,象我一般喜欢for i in xxxx。

那不对啊我感觉,for遍历文本数据的时候默认是读取行?而不是读取字符?我在这些代码里面没看出特定的读取行的代码啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 15:18:53 | 显示全部楼层
czh1303541051 发表于 2020-4-17 15:11
那不对啊我感觉,for遍历文本数据的时候默认是读取行?而不是读取字符?我在这些代码里面没看出特定的读 ...

open打开的文本文件对象是可以直接使用for循环迭代遍历的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 15:20:38 | 显示全部楼层
czh1303541051 发表于 2020-4-17 15:04
没粘贴好  太乱了

你还是先你的帖子用代码模式修改一下吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-17 15:36:55 | 显示全部楼层
txxcat 发表于 2020-4-17 15:20
你还是先你的帖子用代码模式修改一下吧。

没看到在哪儿编辑,没听懂你说的,open打开的文本for是怎么遍历的,按行遍历?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 15:48:33 | 显示全部楼层
czh1303541051 发表于 2020-4-17 15:36
没看到在哪儿编辑,没听懂你说的,open打开的文本for是怎么遍历的,按行遍历?

就是上面一片图标,有字体大小的那一栏,右边有两排小图标,有个<>,点击后把代码复制到窗口里就OK了,效果如下:
f = open('E:\\python\\record.txt')    # 首先你打开文件赋值给f,f就是这个文件的对象了。
for  i in f:        #这一步就可以用for来对f进行迭代了,每次循环读出一行
    print(i)
f.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 15:49:26 From FishC Mobile | 显示全部楼层
txxcat 发表于 2020-4-17 15:09
不是,随便取名,象我一般喜欢for i in xxxx。

我都是 for each in xxxx: …
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-4-17 15:55:29 | 显示全部楼层
_2_ 发表于 2020-4-17 15:49
我都是 for each in xxxx: …

一般我第一层i,第二层j,第三层k,以前写foxpro养成的习惯
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-17 16:14:21 | 显示全部楼层
txxcat 发表于 2020-4-17 15:48
就是上面一片图标,有字体大小的那一栏,右边有两排小图标,有个,点击后把代码复制到窗口里就OK了,效果 ...

这样确实是按行读取,原理能解释一下吗,不然我真有点接受不了,for遍历是按字符来的,这突然来个按行来,总不能解释为这是Python的特性吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-17 16:29:46 | 显示全部楼层    本楼为最佳答案   
czh1303541051 发表于 2020-4-17 16:14
这样确实是按行读取,原理能解释一下吗,不然我真有点接受不了,for遍历是按字符来的,这突然来个按行来 ...

迭代的特性,以后会学到,现在不用要求一定理解。for只有对字符串迭代的时候才是按字符来的,对列表、元素、字典、集合是按元素来的,其实你可以理解为:字符串是以字符为元素组成的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-17 16:43:52 | 显示全部楼层
txxcat 发表于 2020-4-17 16:29
迭代的特性,以后会学到,现在不用要求一定理解。for只有对字符串迭代的时候才是按字符来的,对列表、元 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-26 14:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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