10.文件和异常
学习处理文件,让程序快速的分析大量数据,学习处理错误,避免程序在面对意外时崩溃。学习异常,异常是python创建的特殊对象,用于管理程序运行时出现的错误,提高程序的适用性,可用性,和稳定性。
学习模块json,json可以用于保存用户数据,避免程序意外停止运行时丢失。
学习处理文件和保存数据,可以让程序使用起来更容易,用户可以选择输入什么类型的数据,并选择在什么时候输入,并且可以在使用程序处理一些事后关闭程序,下次在继续做。
学习处理异常,帮助应对文件不存在的情况,以及处理各种可能让程序崩溃的问题,让程序面对各种错误时更健壮,不管这些错误数据源自无意识的错误,还是源自破坏程序的恶意企图。
10.1从文件中读取数据
读取文件可以一次性读取整个文件,也可以逐行读取文件。取决于文件的大小自行选择读取方法。
10.1.1读取整个文件
在 Python 中,读写文件有 3 个步骤:
1.调用 open()函数,返回一个 File 对象。
2.调用 File 对象的 read()或 write()方法。
3.调用 File 对象的 close()方法,关闭该文件。
用 open()函数打开文件
with open(文件名) as file_object:
contents = file_object.read() #不用调用关闭方法,with自动关闭文件。
会在文件当前目录下寻找文件打开。
read()方法读取文件内容
File 对象的 read()方法:
>>> helloContent = helloFile.read() >>> helloContent 'Hello world!' |
可以使用 readlines()方法,从该文件取得一个字符串的列表。列表中的每个字符串就是文本中的每一行。
10.1.2文件路径
注意斜杠、Windows 上的倒斜杠以及 OS X 和 Linux 上的正斜杠。
with open('text_files\filename.txt') as file_object。
有两种方法指定一个文件路径。
- “绝对路径”, 总是从根文件夹开始。
- “相对路径”,它相对于程序的当前工作目录。
绝对文件路径
Win:
file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt’
with open(file_path) as file_object:
Linux和OS:
file_path = '/home/ehmatthes/other_files/text_files/filename.txt'
with open(file_path) as file_object:
还有点(.)和点点(..)文件夹。它们不是真正的文件夹,而是可以在路径中使用的特殊名称。单个的句点(“点”)用作文件夹目名称时,是“这个目录”的缩 写。两个句点(“点点”)意思是父文件夹。
处理绝对路径和相对路径
1.os.path 模块提供了一些函数,返回一个相对路径的绝对路径,以及检查给定的路径是否为绝对路径。
2.调用 os.path.abspath(path)将返回参数的绝对路径的字符串。这是将相对路径转换为绝对路径的简便方法。
3.调用 os.path.isabs(path),如果参数是一个绝对路径,就返回 True,如果参数是 一个相对路径,就返回 False。
4.调用 os.path.relpath(path, start)将返回从 start 路径到 path 的相对路径的字符串。
5.如果没有提供 start,就使用当前工作目录作为开始路径。
10.1.3逐行读取文件数据
for line in lines:
replace()替换函数
file.replace(‘dog’, ‘cat’)
10.2写入文件
10.2.1写入空文件
open(‘file’, ‘w’)提供两个实参,文件名和操作
1.读取模式 ’r’
2.写入模式 ‘w’
3.附加模式 ‘a’
4.读取和写入模式 ‘r+’
5.如果省略模式实参,python将只能默认只读模式打开文件。
6.如果文件不存在,open将自动生成文件。
7.输入是Input,输出是Output,因此,我们把输入输出统称为Input/Output,或者简写为IO。
8.输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法。
注意,如果以写入模式 ‘w’ 打开,如果文件已经存在,将清空文件。
如果传递给 open()的文件名不存在,写入模式和添加模式都会创建一个新的空文件。在读取或写入文件后,调用 close()方法,然后才能再次打开该文件。
Python只能将字符串写入文本文件,要储存数值数据进入文本文件,需要用函数str将其转化为字符串格式。
>>> baconFile = open('bacon.txt', 'w') >>> baconFile.write('Hello world!\n') 13 >>> baconFile.close() >>> baconFile = open('bacon.txt', 'a') >>> baconFile.write('Bacon is not a vegetable.') 25 >>> baconFile.close() >>> baconFile = open('bacon.txt') >>> content = baconFile.read() >>> baconFile.close() >>> print(content) Hello world! Bacon is not a vegetable. |
首先,我们以写模式打开 bacon.txt。因为还没有 bacon.txt,Python 就创建了一 个。在打开的文件上调用 write(),并向 write()传入字符串参数'Hello world! \n',将字符串写入文件,并返回写入的字符个数,包括换行符。然后关闭该文件。
为了将文本添加到文件已有的内容,而不是取代我们刚刚写入的字符串,我们就以添加模式打开该文件。向该文件写入'Bacon is not a vegetable.',并关闭它。最后,为了将文件的内容打印到屏幕上,我们以默认的读模式打开该文件,调用 read(),将得到的内容保存在 content 中,关闭该文件,并打印 content。
请注意,write()方法不会像 print()函数那样,在字符串的末尾自动添加换行字 符。必须自己添加该字符。
用 shelve 模块保存变量
利用 shelve 模块,你可以将 Python 程序中的变量保存到二进制的 shelf 文件中。 这样,程序就可以从硬盘中恢复变量的数据。shelve 模块让你在程序中添加“保存” 和“打开”功能。例如,如果运行一个程序,并输入了一些配置设置,就可以将这 些设置保存到一个 shelf 文件,然后让程序下一次运行时加载它们。
>>> import shelve >>> shelfFile = shelve.open('mydata') >>> cats = ['Zophie', 'Pooka', 'Simon'] >>> shelfFile['cats'] = cats >>> shelfFile.close() |
在 Windows 上运行前面的代码,你会看到在当前工作目录下有 3 个新文件: mydata.bak、mydata.dat 和 mydata.dir。在 OS X 上,只会创建一个 mydata.db 文件。
这些二进制文件包含了存储在 shelf 中的数据。这些二进制文件的格式并不重要,你只需要知道 shelve 模块做了什么,而不必知道它是怎么做的。该模块让你不用操心如何将程序的数据保存到文件中。 你的程序稍后可以使用 shelve 模块,重新打开这些文件并取出数据。shelf 值不必用读模式或写模式打开,因为它们在打开后,既能读又能写。
>>> shelfFile = shelve.open('mydata') >>> type(shelfFile) >>> shelfFile['cats'] ['Zophie', 'Pooka', 'Simon'] >>> shelfFile.close() |
就像字典一样,shelf 值有 keys()和 values()方法,返回 shelf 中键和值的类似列表的值。因为这些方法返回类似列表的值,而不是真正的列表,所以应该将它们传 递给 list()函数,取得列表的形式。
>>> shelfFile = shelve.open('mydata') >>> list(shelfFile.keys()) ['cats'] >>> list(shelfFile.values()) [['Zophie', 'Pooka', 'Simon']] >>> shelfFile.close() |
创建文件时,如果你需要在 Notepad 或 TextEdit 这样的文本编辑器中读取它们, 纯文本就非常有用。但是,如果想要保存 Python 程序中的数据,那就使用 shelve 模块。
10.2.2写入多行
函数write()不会在写入的文本后面自动换行,需要自己添加换行符\n。
10.3 OS操作
10.3.1用 os.makedirs()创建新文件夹
程序可以用 os.makedirs()函数创建新文件夹(目录)。
>>> import os >>> os.makedirs('C:\\delicious\\walnut\\waffles') |
这不仅将创建 C:\delicious 文件夹,也会在 C:\delicious 下创建 walnut 文件夹, 并在 C:\delicious\walnut 中创建 waffles 文件夹。也就是说,os.makedirs()将创建所有 必要的中间文件夹,目的是确保完整路径名存在。
10.3.2 os.path 模块
os.path 模块包含了许多与文件名和文件路径相关的有用函数。
1.查看文件大小和文件夹内容
- 一旦有办法处理文件路径,就可以开始搜集特定文件和文件夹的信息。os.path 模块提供了一些函数,用于查看文件的字节数以及给定文件夹中的文件和子文件夹。
- 调用 os.path.getsize(path)将返回 path 参数中文件的字节数。
- 调用 os.listdir(path)将返回文件名字符串的列表,包含 path 参数中的每个文件(请注意,这个函数在 os 模块中,而不是 os.path)。
- 使用了 os.path.join()来连接 文件夹名称和当前的文件名。
2.检查路径有效性
- 如果你提供的路径不存在,许多 Python 函数就会崩溃并报错。os.path 模块提 供了一些函数,用于检测给定的路径是否存在,以及它是文件还是文件夹。
- 如果 path 参数所指的文件或文件夹存在,调用 os.path.exists(path)将返回 True, 否则返回 False。
- 如果 path 参数存在,并且是一个文件,调用 os.path.isfile(path)将返回 True,否 则返回 False。
- 如果 path 参数存在,并且是一个文件夹,调用 os.path.isdir(path)将返回 True, 否则返回 False。
10.4组织文件
10.4.1 shutil 模块
shutil(或称为 shell 工具)模块中包含一些函数,让你在 Python 程序中复制、移动、改名和删除文件。要使用shutil 的函数,首先需要 import shutil。
10.4.1.1复制文件和文件夹
shutil 模块提供了一些函数,用于复制文件和整个文件夹。
1.调用shutil.copy(source, destination),将路径 source 处的文件复制到路径 destination 处的文件夹(source 和 destination 都是字符串)。
2.如果 destination 是一个文件名,它将 作为被复制文件的新名字。该函数返回一个字符串,表示被复制文件的路径。
>>> import shutil, os >>> os.chdir('C:\\') >>> shutil.copy('C:\\spam.txt','C:\\delicious') 'C:\\delicious\\spam.txt' >>> shutil.copy('eggs.txt', 'C:\\delicious\\eggs2.txt') 'C:\\delicious\\eggs2.txt' |
10.4.1.2文件和文件夹的移动与改名
调用 shutil.move(source, destination),将路径 source 处的文件夹移动到路径 destination,并返回新位置的绝对路径的字符串。
如果 destination 指向一个文件夹,source 文件将移动到 destination 中,并保持原来的文件名。
10.5异常
Python使用被称为异常的特殊对象来管理程序运行时发生的错误。
每当python发生不知所措的错误时就会创建一个异常。
如果编写了处理异常的情况,程序将会继续进行,不然程序将会停止,并返回trackback,包含有关异常的报告。
异常使用 try-except 代码块来处理。执行指定的操作,告诉python改怎么办。使用 try-except 代码块,即使程序遇到错误,也会继续运行,显示自己编写的友好错误提示,让用户知道哪里错了。
1.ZeroDivisionError异常
除数为0时,发生的异常。
2.TypeError异常
只允许整数和浮点数类型的参数。数据类型检查可以用内置函数isinstance()实现
def my_abs(x): if not isinstance(x, (int, float)): raise TypeError('bad operand type') if x >= 0: return x else: return -x ValueError异常
|
3.记录错误
Python内置的logging模块可以非常容易地记录错误信息。
4.抛出错误
如果要抛出错误,首先根据需要,可以定义一个错误的class,选择好继承关系,然后,用raise语句抛出一个错误的实例。
10.6存储数据
使用json模块来存储数据。Json数据的格式并非python专用可以和用其他编程语言的人分享。是一种轻便格式,很有用,也易于学习。
JSON(JavaScript Object Notation)格式最初是为JavaScript开发的,但随后成了一种常见格式,被用与众多语言。
使用json.dump() 和json.load()
json.dump()接受两个实参,要存储的数据以及可用于存储数据的文件对象。
- 存储一组数字的程序 json.dump()
- 将数字读取到内存的程序 json.load()
10.6.2保存和读取用户生成的数据
json.dump和json.load结合使用,分别是存储和载入数据。
10.6.3重构
1.代码可以正确运行,但可做进一步的改进——将代码划分为一系列完成具体工作的函数。这样的过程叫重构。重构让代码更清晰,易于理解,更容易扩展。
2.将大部分逻辑放到一个或多个函数内。
10.6.4小结
1.学习了读取文件,整个文件读取和一行读取,操作文件,打开,读取模式,写入模式,附加模式,读取加写入模式。
2.异常处理try-except-else代码块的使用方法。异常类型。操作数据,保存和读取数据,json模块的使用,dump和load的使用,学会重构代码。
10.7调试
1.断言
凡是用print()来辅助查看的地方,都可以用断言(assert)来替代。
def foo(s): n = int(s) assert n != 0, 'n is zero!' return 10 / n
def main(): foo('0') |
assert的意思是,表达式n != 0应该是True,否则,根据程序运行的逻辑,后面的代码肯定会出错。
如果断言失败,assert语句本身就会抛出AssertionError。
以上是Python基础学习总结(八)的详细内容。更多信息请关注PHP中文网其他相关文章!

Python脚本在Unix系统上无法运行的原因包括:1)权限不足,使用chmod xyour_script.py赋予执行权限;2)Shebang行错误或缺失,应使用#!/usr/bin/envpython;3)环境变量设置不当,可打印os.environ调试;4)使用错误的Python版本,可在Shebang行或命令行指定版本;5)依赖问题,使用虚拟环境隔离依赖;6)语法错误,使用python-mpy_compileyour_script.py检测。

使用Python数组比列表更适合处理大量数值数据。1)数组更节省内存,2)数组对数值运算更快,3)数组强制类型一致性,4)数组与C语言数组兼容,但在灵活性和便捷性上不如列表。

列表列表更好的forflexibility andmixDatatatypes,何时出色的Sumerical Computitation sand larged数据集。1)不可使用的列表xbilese xibility xibility xibility xibility xibility xibility xibility xibility xibility xibility xibles and comply offrequent elementChanges.2)

numpymanagesmemoryforlargearraysefefticefticefipedlyuseviews,副本和内存模拟文件.1)viewsAllowSinglicingWithOutCopying,直接modifytheoriginalArray.2)copiesCanbecopy canbecreatedwitheDedwithTheceDwithThecevithThece()methodervingdata.3)metservingdata.3)memore memore-mappingfileShessandAstaStaStstbassbassbassbassbassbassbassbassbassbassbb

Listsinpythondonotrequireimportingamodule,helilearraysfomthearraymoduledoneedanimport.1)列表列表,列表,多功能和canholdMixedDatatatepes.2)arraysaremoremoremoremoremoremoremoremoremoremoremoremoremoremoremoremoremeremeremeremericdatabuteffeftlessdatabutlessdatabutlessfiblesible suriplyElsilesteletselementEltecteSemeTemeSemeSemeSemeTypysemeTypysemeTysemeTypysemeTypepe。

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)