python基础教程笔记-项目1-即时标记-Day2

昨天主要了解了下生成器,用文档测下lines:

def lines(file):
    for line in file: yield line
yield '\n'

for i in lines(sys.stdin):
	if i:
		print i
		print '---'

测试文档test_input.txt:

hello

how are you
how do you do

fine

执行:

输出结果test_output.txt:

hello

---

---
how are you

---
how do you do

---

---
fine
---

---

这里可以注意到hello后面有个换行,然后再是“---”。个人认为原因如下:

首先,test_input.txt实际上是一个list:

test_input = ['hello\n','\n','how areyou\n','how do you do\n','\n','fine']

其次,print打印出的东西自带换行效果:

print ‘1’
print ‘2’

执行效果为:

即先打印出1,然后换行,再打印2,再换行,最后执行结束。

在test_output.txt中也是这样:

先打印’hello\n’,然后换行,然后打印‘---’,再打印’\n’,再换行,再打印‘---’。。。

接下来看生成器blocks:

def blocks(file):
    block = []
    for line in lines(file):
        if line.strip():
            block.append(line)
        elif block:
            yield ''.join(block).strip()
            block = []

test_input = ['hello\n','\n','how are you\n','how do you do\n','\n','fine']
for i in blocks(test_input):
	if i:
		print i
		print '---'

执行结果:

strip()的功能为删除字符串中的’\n’等空白字符(只删除首尾的!!!,中间的不删,比如’\nhello\nhello’.strip(),返回的结果为’hello\nhello),并返回结果。append为再之后添加,’’.join的意思是将block中的各元素用’’连接起来,返回连接后的字符串.

执行流程:

首先是line = ’hello\n’,lines.strip()为True,经过if后,block的值为’hello\n’。之后line = ’\n’,if中的line.strip()返回的是False,进入elif,block的值是’hello\n’,返回hello并置空block。之后line = ‘how are you\n’,if中判断为True,block为’how are you\n’,再然后line = ‘how do you do\n’,if中判断仍为True,此时block为:[‘how
are you\n’,’how do youdo\n’],再之后line = ‘\n’,if中判断为False,进入elif,’’.join(block)执行后返回的值为’how are you\nhow do youdo\n’,执行strip()后返回’how are you\nhow do you do’(这里要注意,strip()只删除字符串首尾的空白字符,不会删除字符串中间的):

综上,

test_input = [‘hello\n‘,‘\n‘,‘how areyou\n‘,‘how do you do\n‘,‘\n‘,‘fine‘]   经过生成器blocks后,生成的结果应该是:

[‘hello’,how are you\nhow do you do’,’fine’]

也就是将输入的文本返回块

时间: 2024-07-29 05:20:59

python基础教程笔记-项目1-即时标记-Day2的相关文章

python基础教程笔记-项目1-即时标记-Day3

昨天实现了简单的txt转html,今天更深入一步. 主要了解下带星号的参数.getattr函数和callable函数 先看Handler类: class Handler: def callback(self, prefix, name, *args): method = getattr(self, prefix+name, None) if callable(method): return method(*args) def start(self, name): self.callback('s

python基础教程笔记-项目1-即时标记-Day4

今天主要看下re.sub函数和Handler类的sub函数 先看下re.sub函数 re.sub共有5个参数,不过一般写前三个就好了,即pattern,repl和string pattern表示正则中的模式字符串,repl可以是字符串,也可以是函数.string为要进行替换的字符串 先看一段代码: import re def Num2A(match): return 'A' a = re.sub(r'(\d+)', Num2A, 'he123he') print a a = re.sub(r'(

python基础教程笔记-项目2-画幅好画-Day1

今天开始看项目二:画幅好画 项目中会用到图形生成包ReportLab,因此首先装好这个包:easy_install reportlab 从书中可以了解到,这个包主要用于作图. 比如说写字.画线等.执行代码: from reportlab.lib import colors from reportlab.graphics.shapes import Drawing,String,PolyLine from reportlab.graphics import renderPDF d = Drawin

python基础教程笔记-项目2-画幅好画-Day2

本项目剩下部分主要使用量urllib和LinePlot. 什么是urllib? urllib模块提供的上层接口,使我们可以像读取本地文件一样读取www和ftp上的数据. 看代码: import urllib print urllib.urlopen('http://www.baidu.com').read() 执行效果: 重点需要注意的是urlopen函数: 关于urlopen的一些使用实例可参考链接: http://blog.csdn.net/leer168/article/details/8

python基础教程总结15——1.即时标记

1. 测试文档: # test_input.txt Welcome to World Wide Spam. Inc. These are the corporate web pages of *World Wide Spam*, Inc. We hope you find your stay enjoyable, and that you will sample many of our products. A short history of the company World Wide Spa

Python基础教程__项目(公告板)

由于最近学习Python,从最基础的Python基础教程学起,其中最后的十个项目还是很不错的.个人认为.本人新手,如有错误,还请指教. 书上用的是PostgreSQL,这里用的是MySQL.由于这是一个CGI项目.所以事先需要准备一个可以运行CGI脚本的试验环境. 本次用的是Apache运行cgi.配置网上很多. 其次需要创建一个数据表: CREATE TABLE `messages` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `subject` v

python基础教程笔记——画幅好画(详解)

今天写一下基础教程里面的第二个项目,主要使用python来做一个pdf的图,比较简单. 首先我们需要安装用到的模块pip install reportlab即可. 书上是用urlopen从往上下了一个txt文件,然后打开处理一下得到数据,因为我从这个url路径没有获取到数据,所以直接写了一点数据在程序里. urlopen比较简单,以后写爬虫也会经常用到,所以这里就不讲了,只单独讲讲reportlab模块. #encoding:utf8 from reportlab.graphics.shapes

python 基础教程 笔记 一

第一章 python 基础知识 1.1 数字和数学表达式 1.2 python 2.x 和python 3.x print的区别 1.3 python 2.x 和 python 3.x input 的区别 1.4 数学函数 1.5 input 和 raw_input 区别 第二章 列表和元组 第三章 使用字符串 1.1 数字和表达式 Python 默认的除法:整数/整数,无论是否整除都得到整数,不整除的截取小时部分 1 / 2 0 如果想要Python 执行普通的除法,可以之用浮点数来实现也可以

Python基础教程笔记——使用字符串

使用字符串 Table of Contents 1 基本字符串操作 2 字符串格式化:精简版 2.1 用字符串格式化操作符 2.2 用string的Template格式化字符串 3 字符串格式化:完整版 3.1 转换说明符 3.2 简单转换 3.3 字段宽度和精度 3.4 符号,对齐和 0 填充 4 字符串方法 4.1 find 4.2 join 4.3 lower 4.4 replace 4.5 split 4.6 strip 4.7 translate 1 基本字符串操作 说明:字符串也是序