资讯专栏INFORMATION COLUMN

head first python(第三章)–学习笔记

Shisui / 1657人阅读

摘要:增加逻辑来处理首先通过观察方法对于不同的数据返回的值是不同的。所以需要加一些标记,标识数据不符合期望的格式时会出现数据无法正常访问时会出现。

1.介绍基础文件,输入,输出

open()
打开文件,一次传入一行数据,可以结合for循环和readline()来使用

close()
用来关闭open打开的文件

the_file = open("sketch.txt")

the_file.close()

例子:

>>> data = open("/root/python_test/site_list.txt")
>>> print(data.readline())
www.godblessyuan.com

一些基础的目录管理函数

>>> import os
>>> os.getcwd()   #获取当前目录
"/root"
>>> os.chdir("/root/python_test")  #切换目录
>>> os.getcwd()
"/root/python_test"
>>> 
2.需要对数据做一些处理,例如像分隔它,以冒号为分界符
>>> data = open("/root/python_test/headfirstpython/sketch.txt")
>>> for each_line in data:
...     (role,line_spoken) = each_line.split(":")   #这里使用idel时候,需要注意的是代码之间的缩进
...     print role
...     print line_spoken
... 

Other Man
 Anyway, I did.

Man
 You most certainly did not!

Traceback (most recent call last):
  File "", line 2, in 
ValueError: too many values to unpack

遇到报错了,报错意思大概是太多值导致没有被处理,检查发现是因为有些数据是超过一个冒号的,所以这些数据会出错,因为split()处理不了,但是检查了split函数的使用说明,发现是可以支持这种情况的,

>>> help(each_line.split)
Help on built-in function split:

split(...)
S.split([sep [,maxsplit]]) -> list of strings

Return a list of the words in the string S, using sep as the
delimiter string.  If maxsplit is given, at most maxsplit
splits are done. If sep is not specified or is None, any
whitespace string is a separator and empty strings are removed
from the result.
(END) 
  

1.检查方式可以参考上面的方法。

2.支持这种情况的参数是一个叫maxsplit的参数,如果有maxsplit的话,那么至多是maxsplit的数量以上的分界符才会被处理,这样就很好的避免太多分界符的情况了。

如这样:

data = open("sketch.txt")

for each_line in data:
    (role, line_spoken) = each_line.split(":", 1)
    print role
    print line_spoken

data.close()

不过,即使加了参数,还是遇到报错了

Man
 Oh no you didn"t!

Other Man
 Oh yes I did!

Man
 Oh look, this isn"t an argument!

Traceback (most recent call last):
  File "", line 2, in 
ValueError: need more than 1 value to unp

这里是说需要超过一个值去处理,查看了数据,发现是有些数据没有冒号导致程序处理失败。

3.增加逻辑来处理

首先通过观察find()方法对于不同的数据返回的值是不同的。

>>> each_line = "iiiii" 
>>> each_line.find(":")
-1
>>> each_line = "iiiii:"
>>> each_line.find(":") 
5
>>> 

然后可以使用的逻辑有2种,一种是if判断,另外一种是try:expoet

try:
    你的代码(可能会导致运行错误的)
except:
    错误回复代码

这种方式的机制是通过捕获某代码的错误,然后执行响应的修复代码,例子:

data = open("sketch.txt")

for each_line in data:
    try:
        (role, line_spoken) = each_line.split(":", 1)
        print role
        print line_spoken
    except:
        pass

data.close()

如果

        (role, line_spoken) = each_line.split(":", 1)
        print role
        print line_spoken

这里有其中一句代码是执行失败的,都会转到pass里面去,pass代表空语句,或者null,什么也不做。

或者就是使用最简单的if判断

for each_line in data:
    if not each_line.find(":") == -1:   #not关键字是将一个条件取反
        (role, line_spoken) = each_line.split(":", 1)
        print(role, end="")
        print(" said: ", end="")
        print(line_spoken, end="")

data.close()

不过需要注意的是,像下面这种多重try:except的代码是很容易影响到我们判断那一部分代码才是真正有问题的代码,因为无论里面和外面的try出错了,都会返回 print("The datafile is missing!"),这样就不能判断是那部分代码有问题了。

try:
    data = open("sketch.txt")

    for each_line in data:
        try:
            (role, line_spoken) = each_line.split(":", 1)
            print role
            print line_spoken
        except:
            pass

    data.close()
except:
    print("The datafile is missing!")

所以需要加一些标记,标识(ValueError-数据不符合期望的格式时会出现,IOError-数据无法正常访问时会出现。)

try:
    data = open("sketch.txt")

    for each_line in data:
        try:
            (role, line_spoken) = each_line.split(":")
            print role
            print line_spoken
        except ValueError:
            pass

    data.close()
except IOError:
    print("The datafile is missing!")

http://www.godblessyuan.com/2015/04/20/head_first_python_chapter_3_lea...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37506.html

相关文章

  • head first python(第一章)–学习笔记

    摘要:第一章学习流程图安装这里是用的,除了之外,和都自带了,只是版本没有这么新。是区分大小写的。可以根据多维数组来理解。知识点补充里列表是打了激素的数组,意味着列表比数组更厉害,更好用。的语句的缩进是必须规范的。 head first python(第一章)--学习流程图 showImg(http://source1.godblessyuan.com/blog_headfirstpytho...

    TerryCai 评论0 收藏0
  • head first python(第四章)–学习笔记

    showImg(http://source1.godblessyuan.com/blog_head_first_python_chapter_4_20150426.jpg); 其实持久存储不仅仅包含文件,还包括数据库等,本章先介绍一部分,先熟悉一下。 熟悉python数据 #!/usr/bin/python # -*- coding: utf-8 -*- man = [] other =...

    venmos 评论0 收藏0
  • head first python(第五章)–学习笔记

    摘要:原来的顺序会丢失。原数据的顺序依然保留。方法串联第一个方法应用到数据中,然后再将处理好的数据应用到第二个方法中。例子函数串联每个函数会取得数据,对他完成某个操作,然后把转换后的数据继续向下传递到下一个函数。 showImg(http://source1.godblessyuan.com/blog_head_first_python_chapter_5_20150427.jpg); 1...

    aikin 评论0 收藏0
  • head first python(第二章)–学习笔记

    摘要:第二章学习流程图函数转换为模块函数转换为模块后,就可以灵活的使用模块,方便代码分类,避免代码堆积在一个文件上。使用命令打包代码,生成发布包打包后会生成目录和文件发布后会多了目录和文件,这个是发布的生成的包和相关配置文件。 head first python(第二章)--学习流程图showImg(http://source1.godblessyuan.com/blog_head_firs...

    import. 评论0 收藏0
  • head first python(第六章)–学习笔记

    摘要:代码改为根据数据结构,第一个数据是名字,第二个是生日,第二个之后是成绩,所以分别将相关数据赋值到字典里面。是否知道何时使用列表而何时使用字典,这正式从好的程序员中区分出优秀程序员的一个标准。特定函数应用特定数据。更加正规的做法是建立类。 showImg(http://source1.godblessyuan.com/blog_head_first_python_chapter_6_20...

    piapia 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<