python之split()使用方法

来源:互联网 发布:js 访问json第n个 编辑:程序博客网 时间:2024/06/06 11:01

最近在读《Head First Python》,只是对最近学习的内容做一个小总结。最近遇到了字符串分割,在实际操作的过程中,遇到了一些错误,于是就自己遇到的问题做了一个总结。

在书中,对于函数split()的总结顺序是:

1.基础用法-->2.当用于分割的依据有多个时,出现错误,怎么保证分割。-->3.当没有出现分割字符时,怎么处理。-->4.对于文件出现错误,用try,except串进行统一处理。

我按照自己在其中实际操作遇到的问题顺序进行整理,顺序为:

1.正常分割-->2.没有出现用于分类的字符。-->3.按空格分类出现错误。-->4.对文件的出现的错误,用try,except串进行解决。

小马说:我什么时候才能过河呢?

老爷爷说:等天亮的时候把。

小马说 那天亮时什么时候呢?

爷爷沉默了一下。

爷爷说:太阳升起来的时候天就亮了。

我们发现一个规律,那就是每一个”说“字后面,都接着一句话,我们可以根据冒号:来作为分割的依据,将人和说的话进行分开。这就可以用到一个函数split()来进行分割。

上一篇微博中,已经提示过如何更改路径,在上一次的基础上,我们继续本次的学习。

上一次的代码为:

import os //引入包

>>>os.getcwd() //getcwd()方法是获取当前目录

结果:

>>>os.getcwd() //getcwd()方法是获取当前目录

>>> os.chdir('C:\Users\moli\Desktop')//更改目录,写的是绝对路径。

>>> os.getcwd() //获取当前路径。

'C:\\Users\\moli\\Desktop' //当前路径是C盘目录下,Users目录,Users目录是默认目录,moli是

>>> os.chdir('../Desktop/first')

原来的文件夹是C盘的python27,即:'C:\\Python27'。

更改过后的文件夹是C盘的Users文件夹下面的Desktop/first。

在first文件夹下面,有一个test.txt文件,文件内容为:

1.idhiasdb jolc cjl dnd dd dndjd

2.zsdcbj  dfchdkc cndjkchs c c

3.cbkjd clkj chdjbcndvi jcjlkv

4.dhck idlhv nvkldhv voidjlv vlkdj

5.ckd cjl cdl czxkn clsjc ldcjod

6.cdb cdkjc cdjc lsjdl codjfo cjdlv

7.cdk ldjvl dlk;v jv]ovm

8.cdk ;dkfc djdf dlfn 

只有8行文件。

1.正常分割

用于分割的代码:

data = open('test.txt')               //打开文件test.txtfor each_line in data:                 //一行一行读入数据(role, line_spoken ) = each_line.split('.')  //按.分串,因为分成两部分,所以传入参数为两个。print(role)                                  //打印出两个串,串之间加入said:作为分割。print('said:')print(line_spoken)
结果正确。

2.某些行不包含分割条件

当第一行的.变为:输入此代码报错:

Traceback (most recent call last):
  File "<pyshell#181>", line 2, in <module>
    (role, line_spoken ) = each_line.split('.',1)
ValueError: need more than 1 value to unpack

错误:需要一个值来解压(ValueError: need more than 1 value to unpack)

错误原因:因为第一行没有符号“.”所以无法分割,所以没有值传入,所以报错。

更改方法:

1.将第一行的冒号改为句号,但是这显然不解决问题。

2.只能增加判断,用到find()方法,当find(':')返回值为-1,表示没有找到,则该行不作为分割。代码及运行结果如下:

 data.seek(0) for each_line in data:if not each_line.find('.') == -1:(role, line_spoken ) = each_line.split('.')print(role)print('said:')print(line_spoken)

运行结果如下:

2said:zsdcbj  dfchdkc cndjkchs c c3said:cbkjd clkj chdjbcndvi jcjlkv4said:dhck idlhv nvkldhv voidjlv vlkdj5said:ckd cjl cdl czxkn clsjc ldcjod6said:cdb cdkjc cdjc lsjdl codjfo cjdlv7said:cdk ldjvl dlk;v jv]ovm

第一行不包含运行条件,所以直接跳过,运行第二行。

3.某一行中分割条件包含多个

当我们按照空格进行分割的时候,可能一行中包含多个分割条件。所以产生问题。

解决办法:

1.split()函数有两个参数,split strmaxsplit)方法有两个参数,str是分类依据,这里写为“ ”,maxsplit表示最大分割次数。当maxsplit=1时,因为最多分割一次。所以即使有多个分割条件,也只会分割一次。

代码只更改了一行:

(role, line_spoken ) = each_line.split(' ',1)

表示最多只分割一次,则运行结果同上。

如果想要分割两次,则存在风险,首先,有的分割之后会有两个字符串,有的分割之后会产生三个字符串,则传入的参数,如果写两个(role,line_spoken),则当传入三个字符串的时候,没有参数接收。

如果写三个字符串(role,line_spoken,third),则如果只分割成两个字符串,第三个没有值传入则会报错。

这个问题目前我还没有解决。

我们发现很多问题会接踵而至,那么有没有一种方法,只让我们关注到我想要的正确结果上,其余的都规避不看呢?

4.try-except方法

就像java语言中的try-catch,在python中我们可以使用try-except方法。

输入代码:


运行结果同上。

try-except语法:(主意冒号和缩进)

try:   要保护的代码块except:   异常处理


总结如上,欢迎指正。










原创粉丝点击