Python文件文件读写教程

书山有路勤为径,学海无边苦作舟。说的是读书方面的事情。在计算机里也有“读”的概念,它指的是把文件的内容加载到内存,方便让我们看到它的内容。下面我们就来看看文件长什么样吧。

文件概论(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,所以解密的方法就是反过来就行了,上面的代码又把字符串还原成一朵玫瑰和一只猫了。