概述
严格讲,文件不属于数据类型。
02操作
1)打开文件
(1)基本语法:file=open(‘文件名’,mode)
参数mode模式可选参数,分为:r读 w写 a追加
r/w/a后面可接第二个参数,b标书二进制,f=open(‘data.bin’,’rb’)
(2)完整语法格式为:
open(file, mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
- file: 必需,文件路径(相对或者绝对路径)。
- mode: 可选,文件打开模式
- buffering: 设置缓冲
- encoding: 一般使用utf8
- errors: 报错级别
- newline: 区分换行符
- closefd: 传入的file参数类型
- opener:
mode 参数有:
2)创建文件
myfile = open(‘hello.txt’,’w’) #创建txt文件
3)写入文件
myfile.write(“人生苦短,快用Python”)
myfile.close() #使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
4)读取文件
例子:f=open(‘data.bin’,’rb’) #读取二进制文件。
(1)read默认读取所有内容,且读取完再读取没有信息,此时指针指在文件末尾
(2)一行一行读取
f = open (‘hello.txt’)
f.readline()
(3)读取所有行并打印
f = open (‘hello.txt’)
f.readlines()
注意:
文件对象提供了三个“读”方法: .read()、.readline() 和 .readlines()。每种方法可以接受一个变量以限制每次读取的数据量,但它们通常不使用变量。
.read() 每次读取整个文件,它通常用于将文件内容放到一个字符串变量中。然而 .read() 生成文件内容最直接的字符串表示,但对于连续的面向行的处理,它却是不必要的,并且如果文件大于可用内存,则不可能实现这种处理。
.readline() 和 .readlines() 非常相似。它们都在类似于以下的结构中使用:
readlines() 示例:
fh = open( ‘c:\\test.txt’)
for line in fh.readlines():
print line.readline() 和 .readlines()之间的差异是后者一次读取整个文件,象.read()一样。.readlines()自动将文件内容分析成一个行的列表,该列表可以由 Python 的 for… in … 结构进行处理。另一方面,.readline()每次只读取一行,通常比.readlines()慢得多。仅当没有足够内存可以一次读取整个文件时,才应该使用.readline()。
写:
writeline()是输出后换行,下次写会在下一行写。
write()是输出后光标在行末,不会换行,下次写会接着这行写
5)pickle读取python‘对象’
Python很多数据有类型,当这些类型数据放入文本中,会导致类型丢失。
例子:下面例子为①定义了三个变量1,2,3和一个list为[1,2,3]
②把他们分别存入文件,
③把他们分别读取出来
注意: 1,2,3存入使用了format方法,list存入使用了str转换为字符串再存入。存入文件后,数据类型都变成了字符型,如果想还原还需要分割逐个还原。
所以用文件存储有数据类型内容,比较麻烦。
解决方法:①序列化概念:即可以把原本在内存中的各种类型可以序列号为一种结构。需要时候还可以还原回来。
②Python准备了一个模块pickle(音译皮克乐):可以直接存储和读取本地的python类型对象
例:①定义一个字典d,
②定义一个二进制文件datafile.pkl(二进制文件后缀可以自己随意取)
③导入pickle
④用dump方法把d写入f中
⑤用load方法把f数据读取到data中,查看仍然是原来类型数据。可以用字典方法操作data,说明类型没有发生变化
6)用with方法打开文件
如果操作一个文件,又担心忘了关闭,可以如下操作:
用with方法把文件打开存入一个临时变量f中,
当程序运行完with范围后会自动脱离该文件即关闭文件
以后打开文件可以习惯用with打开文件