首页 > 代码库 > 【四】文件与异常2

【四】文件与异常2

文件

在我们读写一个文件之前需要打开文件

data=http://www.mamicode.com/open(filename,mode)
  1. data是open()返回的文件对象
  2. filename是该文件的字符串名
  3. mode是文件类型和操作的字符串

mode第一个字母的文件类型:

  • r:只读。这是默认模式
  • r+:可读可写,不会创建不存在的文件,如果直接写文件,则从顶部开始写,覆盖之前此位置的内容
  • w:只写,如果文件不存在则新建,如果已存在则覆盖内容
  • w+:读写,如果文件不存在则新建,如果已存在则覆盖
  • x:在文件不存在的情况下新建并写文件

mode第二个字母的文件类型:

  • t:文本类型
  • b:二进制文件

使用write()写文本文件

使用write写入:

In [66]: poems=白日依山尽,黄河入海流,日穷千里目,更上一层楼
#打印poems的字节大小
In [67]: len(poems)
Out[67]: 23
#打开test.txt
In [68]: fout=open(test.txt,wt)
#将poems的内容写入
In [70]: fout.write(poems)
Out[70]: 23 #函数 write() 返回写入文件的字节数
#关闭连接
In [71]: fout.close()
In [72]: cat test.txt
白日依山尽,黄河入海流,日穷千里目,更上一层楼

使用print写入:

In [1]: poem="鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波"
In [2]: fout=open(test.txt,wt)
In [3]: print(poem,file=fout)
In [4]: fout.close()
In [5]: cat test.txt
鹅鹅鹅,曲项向天歌,白毛浮绿水,红掌拨清波
  • sep 分隔符:默认是一个空格 ‘ ‘
  • end 结束字符:默认是一个换行符 ‘\n’
In [4]: fout=open(test.txt,w)
In [5]: poem="加油,好好学习,天天向上"
In [6]: print(poem,file=fout,sep=‘‘,end=‘‘)
In [7]: cat test.txt
In [8]: fout.close()
In [9]: cat test.txt
加油,好好学习,天天向上

如果字符串非常大,可以将数据分块,直到所有字符被写入:

In [14]: poem
Out[14]: 鹅鹅鹅,曲项向天歌,白毛湖绿水,红掌拨清波
In [15]: fout=open(libai.txt,w)
In [16]: off=0
In [17]: chunk=10
In [18]: while True:
    ...:     if off>size:
    ...:         break
    ...:     fout.write(poem[off:off+chunk])
    ...:     print(poem[off:off+chunk])
    ...:     off+=chunk
    ...:     
鹅鹅鹅,曲项向天歌,
白毛湖绿水,红掌拨清
波
In [19]: fout.close()

如果 libai.txt 文件已经存在,使用模式 x 可以避免重写文件:

In [21]: fout=open(libai.txt,xt)
---------------------------------------------------------------------------
FileExistsError                           Traceback (most recent call last)
<ipython-input-21-2bb5519d7012> in <module>()
----> 1 fout=open(libai.txt,xt)

FileExistsError: [Errno 17] File exists: libai.txt

使用 read()、readline() 或者 readlines() 读取文本文件

 使用不带参数的 read() 函数一次读入文件的所有内容。

In [22]: fin=open(libai.txt,rt)
In [23]: poem1=fin.read()
In [24]: poem1
Out[24]: 鹅鹅鹅,曲项向天歌,白毛湖绿水,红掌拨清波
In [25]: fin.close()
In [26]: len(poem1)
Out[26]: 21

 函数 readlines() 调用时每次读取一行,并返回单行字符串的列表

In [28]: poem=‘‘‘鹅鹅鹅,
    ...: 曲项向天歌,
    ...: 白毛湖绿水,
    ...: 红掌拨清波。
    ...: ‘‘‘
In [29]: fin=open(libai.txt,wt) #写入文件
In [30]: fin.write(poem)
Out[30]: 26
In [31]: fin.close()
In [32]: cat libai.txt
鹅鹅鹅,
曲项向天歌,
白毛湖绿水,
红掌拨清波。
In [33]: fin=open(libai.txt,rt) #读取文件
In [34]: lines=fin.readlines()
In [35]: fin.close()
In [36]: lines
Out[36]: [鹅鹅鹅,\n, 曲项向天歌,\n, 白毛湖绿水,\n, 红掌拨清波。\n]
In [37]: print(len(lines))
4
In [41]: for line in lines:
    ...:     print(line,end=‘‘)
    ...:     
鹅鹅鹅,
曲项向天歌,
白毛湖绿水,
红掌拨清波。

 

【四】文件与异常2