>>> fileObj = open('spam.txt', 'r')>>> content = fileObj.read()>>> print(content)Hello world!>>> fileObj.close()打开文件之后创建的文件对象存储在变量 fileObj 中,如果该对象存在,则可以使用read()方法读取文件的内容并将其存储在变量 content 中,随后打印该变量的值 。执行完上述对文件对象的操作后,使用close()方法关闭该文件 。
如果遇到“IOError: [Errno 2] No such file or directory”的报错信息,请确保想要打开的文件就在读者认为的路径下,并再次检查文件名和文件夹的名称是否正确输入 。(文件夹即路径 。)
在transpositionFileCipher.py程序中,对文件进行的加密和解密需要用到上文提到的所有open()、write() 及 close()方法 。
10.5 创建main()函数transpositionFileCipher.py 程序的第一部分应该看起来十分眼熟,第4行是一个import 语句,引入了transpositionEncypt.py和transpositionDecrypt.py两个程序和Python库中的time、os及sys模块,接下来的部分即main()函数,其中创建了程序需要用到的变量 。
1. # 置换密码加/解密文件2. # https://www.nostarch.com/crackingcodes/ (BSD Licensed)3.4. import time, os, sys, transpositionEncrypt, transpositionDecrypt5.6. def main():7.inputFilename = 'frankenstein.txt'8.# 注意,如果具有outputFilename 名称的文件已存在,则此程序9.# 覆盖该文件10.outputFilename = 'frankenstein.encrypted.txt'11.myKey = 1012.myMode = 'encrypt' # 设置为 'encrypt'或'decrypt'变量 inputFilename 存储了待读取文件名的字符串,而加密后(或解密后)的内容写入以变量 outputFilename 的值命名的文件内 。程序涉及的置换密码使用一个整数作为密钥,并存储在myKey中,同时,程序需要一个变量 myMode 存储字符串encrypt或decrypt以决定对 inputFilename 存储的文件进行何种操作 。在读取 inputFilename 文件之前,首先要使用 os.path.exists() 检查该文件是否存在 。
10.6 检查文件是否存在读取文件往往不会存在什么危害,但往文件中写入内容时就需要多加小心了,这是因为以写模式调用open()方法时,若原文件已存在,会覆盖掉原文件中的内容 。针对这个潜在问题,程序可以使用os.path.exists() 方法,检查要打开的文件是否已经存在 。
10.6.1 os.path.exists() 方法os.path.exists()方法只有一个参数,即文件名或指向文件的文件路径,如果文件存在,则返回True;否则返回False 。该方法包含在path模块内,而path模块包含在 os 模块中,因此引入 os 模块时,path模块一并被引入了 。
将下列代码输入交互式运行环境 。
>>> import os ? >>> os.path.exists('spam.txt')False>>> os.path.exists('C:\Windows\System32\calc.exe') # WindowsTrue>>> os.path.exists('/usr/local/bin/idle3') # macOSFalse>>> os.path.exists('/usr/bin/idle3') # LinuxFalse在本例中,os.path.exists()方法证实了Windows系统中存在calc.exe文件 。当然,只有在Windows系统下运行Python的时候,才能得到上面的结果 。记住,在Windows下输入文件路径时,要在反斜杠前再添加一个反斜杠进行转义 。如果使用的是macOS,则上述代码中只有macOS的样例会返回True,同理在Linux系统下只有最后一个例子会返回True 。如果没有给出完整的路径?,则Python会检查当前的工作路径;对IDLE交互式运行环境而言,当前工作路径即安装了Python的文件夹 。
10.6.2 使用os.path.exists()方法检查输入的文件是否存在本章程序的第14~17行使用了os.path.exists()检查 inputFilename 中的文件是否存在,如果没有这一步,就无法获得用于加解密的文件 。
14.# 如果输入文件不存在,则程序提前终止15.if not os.path.exists(inputFilename):16.print('The file %s does not exist. Quitting...' % (inputFilename))17.sys.exit()若文件不存在,程序将为用户弹出提示并退出 。
10.7 使用字符串方法令用户的输入更灵活接下来,程序需要检查是否存在与 outputFilename 同名的文件,如果存在,则询问用户是输入c继续运行程序还是输入q退出程序 。由于用户可能会输入多种回复,例如c、C,甚至是单词Continue,因此程序需要确保可以接收所有这些输入,要实现这一功能,必须使用更多字符串方法 。
10.7.1 upper()、lower()和title()字符串方法upper()和lower()方法能够分别以全大写和全小写返回它们所接收的字符串 。将下列代码输入交互式运行环境中以分辨这两个方法是如何对同一个字符串进行操作的 。
>>> 'Hello'.upper()'HELLO'>>> 'Hello'.lower()'hello'
推荐阅读
- GUI 什么是Python 的图形界面编程?你了解了吗
- Python之PyCharm永久性激活教程
- 编程小白们,别再去啃谭浩强的C语言了,有人这样学一个月入门
- Python3.8的新增特性
- 带你认识Python中黑客喜欢攻击的10个安全漏洞以及应对方法
- 十一 网络编程懒人入门:一文读懂什么是IPv6
- 教你用Python实现截图和文字识别,就是这么简单
- Python中多线程和多处理的初学者指南
- method 学编程傻傻分不清什么是方法和函数(function)?
- 谁偷偷删了你的微信?用Python分分钟揪出来
