书山有路勤为径,学海无边苦作舟。说的是读书方面的事情。在计算机里也有“读”的概念,它指的是把文件的内容加载到内存,方便让我们看到它的内容。下面我们就来看看文件长什么样吧。
文件概论(file Introduction)
打开计算机,双击播放器,欣赏小电影,阅读电子书。这些可能是你习以为常的动作。其实你都进行了打开文件的操作。当双击的时候,就会对应有一个程序来打开电影,电子书或图像。一部电影对应着一个视频文件,一部电子书可能对应着一个文本文件,而一幅图可能对应的就是一张图像文件。有部电影叫《正义联盟》,我们下载了它放在电脑中的某个文件夹。它的名称可能是下面这样,对着它单击右键,显示出它的一些信息,请看以下图示:
上面的文件名有三部分,分别是点号前面的字符,点号,点号后面的字符。点号后面的叫扩展名或后缀名,当然也有人把点号本身也连同进去说它们是后缀名。
Python源文件的后缀名是py。 对着Python的源代码文件单击右键。我们能清楚地看到文件的类型、大小、创建时间、打开方式等等。原来,扩展名也是可以用来标识文件的类型。我们说上面的文件是py文件也是可以的,它实质上是文本文件。文本文件的后缀名可能有很多,如txt,html,asp,php,bat等等。我们可以用Python打开它们,看看文本文件里有些什么东西。
读文本文件(read text file)
打开文本文件用open命令,它会返回一个文件对象,通过文件对象我们就能使用read方法读出它的内容,然后把内容通过一个变量名称进行引用,最后通过print打印,我们就能看到它的内容了。假设有一个文本文件的名字为“唐诗.txt”,以下是打开它的示例:
>>> f = open("唐诗.txt") # 打开文件 >>> fc = f.read() # 读取文件内容 >>> f.close() # 关闭文件 >>> print(fc) # 打印文件内容
在上面的代码中,open命令根据文件名打开文件,生成了文件对象, 我们用f来引用它。需要注意的时候,如果文件不存在,那么是打不开的,并且会显示文件找不到的错误。文件对象有read命令,通过这个命令就能读取的文件内容。不过,如果不把文件的内容用fc来引用,那么我们无法通过print打印了。当读出了文件内容后,我们一定要关闭文件,用f的close命令就行了。
其实在用open命令打开文件的时候,它还有一个参数。关于参数,我们现在理解为在命令中小括号里面的数据即可,参数可能有个名称,这叫关键词参数。open命令的第一个参数是文件名,第一个参数是模式,英文为mode。它决定了打开文件的时候是否是读还是写,上面我们没有写这个参数,那么open命令就默认为读文件。以下是示例代码:
>>> f = open("唐诗.txt",mode='r') >>> fc = f.read() >>> f.close() >>> print(fc)
上面的open命令的小括号里有两个数据,第一个表示文件名,第二个表示读写模式。mode在英文中就是模式的意思。让mode的值为’r’,表示在用open命令打开它时,只能读取它的内容。我们是无法修改文件的内容的,如果要修改它的内容怎么办,这就要把模式改为’w’。接下来,我们来写一写文件。
写文本文件(write text file)
写文件会改变文件的内容,当我们以写的模式打开文件时,如果文件不存在,那么会自动创建那个文件。下面的代码将会创建一个新的文件:
>>> f = open("唐诗.txt",mode='w') >>> f.write("这是一首李白写的诗。\n") >>. f.write("静夜思............。\n") >>> f.close()
上面的代码会在当前文件夹打开名为”唐诗.txt”的文件,如果它不存在,则会创建它。如果它存在,那么它的内容将会被改写。 如果它里面有非常重要的内容,那么当写完后,运行close命时,那么以前的数据会全部丢失,这将会造成损失。
附,在IDLE中的当前文件夹可以通过导入os模块,运行os.getcwd()获取。
加密解密(Encrypt and Decrypt)
我们可以把一串字符转换成另一种形式,让别人无法明白,而自己通过程序则可以把它恢复为原来的样子, 那么就能读懂了。怎么转换呢?有很多种方法,字母都有一个编号,这个编号叫ASCII码,是美国人制定的,现在已经成为国际标准了。这个编号可以用ord命令求出来。反过来,一个编号也就对应着一个字母,用chr命令可以把这个字母显示出来。以下是代码示例:
>>> ord('a') # 求字母a的编号 97 >>> chr(97) # 求编号为97对应的字符 'a' >>> for number in range(48,58): # 迭代number从48到57 print(chr(number),end=' ') 0 1 2 3 4 5 6 7 8 9 >>> chr(ord('a')) # 求字母a的编号所对应的字符 'a' >>> chr(ord('a')+1) # 求字母a的编号增加1后所对应的字符 'b' >>>
从上面的例子中,我们看到48编号的字符为”0″,而57编号的字符为”9″ 。ord命令取自英文order的前三个字母,chr命令取自character(字符)的相关字符。
有趣的是第10行,它求出字母a的编号,然后又用chr去求这个编号所对应的字符,得到的结果当然是字母a了。这好像没有什么用处,其实不然。下面就运用这种方法对字符串进行加密。如果把某个字符的编号加上一个数字,再用chr把它转换成字符,好像这个字符就“加密”了一样。以下是把一串字符进行简易加密的代码。
>>> string = 'a rose and a cat' >>> string2 = "" >>> for c in string: # 迭代字符串 string2 = string2 + chr(ord(c)+1) # 连接字符串 >>> string2 'b!sptf!boe!b!dbu' >>>
string本来是一朵玫瑰和一只猫,现在它变成了一串我们谁也不认识的字符串了。这就是一个非常简单的加密过程。现在我们再编制一个程序,把它转换回去。
>>> string3 = "" >>> for c in string2: # 迭代string2 string3 = string3 + chr(ord(c)-1) >>> string3 'a rose and a cat' >>>
给字符串加密的方法加是把字符的编码加1,所以解密的方法就是反过来就行了,上面的代码又把字符串还原成一朵玫瑰和一只猫了。