Python Crash Course读书笔记 - 第10章:FILES AND EXCEPTIONS

读取文件

第一步是将文件读入内存。

第一个示例是一次性读入:

>>> with open('pi_digits.txt') as file_object:
...     contents = file_object.read()
...
>>> print(contents)
3.1415926535
  8979323846
  2643383279

>>> print(contents.rstrip())
3.1415926535
  8979323846
  2643383279

wiithas是关键字,文件一次性读入file_object
使用with时,打开的文件只能在with所在的代码块可用。

相对路径的起点是当前路径,即python文件执行的路径。
第一个print多一空行,是因为读到文件尾部时返回一空串。
最后,文件只有open()没有close(),通过with打开的文件,python会自动关闭,我们不用去管。

绝对路径和相对路径的概念就不说了。记住Unix下路径用/,Windows下用\

第二个示例是逐行读取,还是用空行的问题。

>>> with open('pi_digits.txt') as file_object:
...     for line in file_object:
...             print(line)
...
3.1415926535

  8979323846

  2643383279

以下代码将文件内容存于List中,这样即使脱离了with代码块,仍可访问文件的内容。

>>> with open('pi_digits.txt') as file_object:
...     lines = file_object.readlines()
...
>>> for line in lines:
...     print(line.rstrip())
...
3.1415926535
  8979323846
  2643383279

Python读取文本文件时,将所有内容都转变为字符串,如果你需要数字类型,则需做相应的转换。

示例中学到的几点:

>>> names=['flora', 'amy', 'tina', 'grace', 'amy']
>>> 'amy' in names
True
>>> names.count('amy')
2

>>> str='abcdefg'
>>> 'bcd' in str
True

>>> print(names[:3])
['flora', 'amy', 'tina']

写文件

写文件时,open函数必须指定模式,如写(w),追加(a)等,默认为只读(r)。例如模式为w时会覆盖文件。读写模式为r+

>>> filename = '/tmp/1'
>>> with open(filename, 'w') as file_object:
...     file_object.write("I love programming.")
...
19

Python写文件只能写字符串。
write函数不带换行符,如果写多行,需要补上\n

例外

例外就是Exception对象,这和Java类似。只不过Java是try...catch,而Python是try...except
例外如果不处理,程序会中止。
例外示例,可以看到例外的对象名为ZeroDivisionError

>>> 4/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

处理例外:

>>> try:
...     4/0
... except ZeroDivisionError:
...     print('not allowed')
...
not allowed

以下为典型的例外处理代码,else部分是可选的:

try:
	<你的操作>
except <例外对象名>:
	<处理例外>
except <例外对象名>:
	<处理例外>
else:
	<正常处理>

如果在处理例外时什么都不做,可以使用pass语句,相当于一个占位符。pass也可用在别处。

文件不存在引起的例外为FileNotFoundError。字符串转换为整型时的例外为ValueError。

下一个示例为处理文本,文本是从Project Gutenberg网站获取然后存于本地。
在这里插入图片描述
由于文本编码是UTF-8:,打开文件时,需要指定编码:

open(filename, encoding='utf-8')

处理的思路如下:

  • open()读入字符串
  • 字符串split方法 -> List
  • len(List)即单词个数

存储数据

示例使用了json.dump()json.load(),因此通过import json引入了模块。虽然示例中只是简单的照原样存取,但这两个函数还可以带很多格式化的选项,详见这里

最后提到了重构(Refactoring)。作者对重构的定义:

improve the code by breaking it up into a series of functions that have specific jobs

重构可使代码更干净,易理解,易扩展。
关于重构,推荐Martin Fowler写的Refactoring:Improving the Design of Existing Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值