- import sys
- import codecs
- import pickle
- def filetest():
- # 读文件,可选的模式参数包括r:读,w:写,a:追加,U:通用换行模式(因为Windows下的标准换行为\\r\\n,Linux下为\\n)
- # b:二进制模式,+:等价于rw,t:文本模式(默认值)
- # 模式参数可选,如果省略则默认为r
- print("读文件:")
- f = open("test.txt", "rU")
- for line in f:
- print(line)
- f.close() # 关闭文件流
- print("-------------------------")
- # 注意如果文件中包含中文,必须设定编码参数与文件编码一致才可以正常读取
- # 使用codecs模块读取unicode文件,如果不指定字符编码参数则默认为utf-8
- print("指定编码读文件:")
- f = codecs.open("test.txt", "rU", "utf-8") # 指定文件的字符编码为utf-8
- for line in f:
- print(line)
- f.close()
- print("-------------------------")
- # f.read()
- # 不指定任何参数,则读取整个文件的内容并返回,注意可能文件大小超过机器内存。如果读到文件末尾将返回一个空字符串
- print("文件读read(): ")
- f = open("test.txt", "rU")
- print(f.read())
- print(f.read()) # 打印空字符串
- f.close()
- # 指定size表示读取的字符数或者字节数
- print("文件read()读取指定字符数:")
- f = open("test.txt", "rU")
- print(f.read(5))
- f.close()
- print("文件read()读取指定字节数:")
- f = open("test.txt", "rbU")
- print(f.read(6)) # 读取得到6个字节,为 b'hello,'
- f.close()
- print("-------------------------")
- # f.readline()按行读取
- print("按行读取文件readline():")
- f = open("test.txt", "rU")
- line = f.readline()
- count = 0
- while line != "":
- print(line)
- line = f.readline()
- count += 1
- print("共有%d行" % (count)) # 总共有两行但显示上看起来有3行因为第一行末尾带有一个换行符
- f.close()
- print("-------------------------")
- # f.readlines()读取所有行到数组,每行是一个元素
- print("读取所有行readlines():")
- f = open("test.txt", "rU")
- lines = f.readlines()
- for line in lines:
- print(line)
- f.close()
- print("-------------------------")
- # 官方推荐的文件读取方法( memory efficient, fast, and leads to simpler code)
- print("for loop读取文件:")
- f = open("test.txt", "rU")
- for line in f:
- print(line, end="")
- print("\\n-------------------------")
- # 写文件write()
- print("写文件write():")
- f = open("test.txt", "a+")
- f.write("\\nthis is a new string added by write()")
- f.close()
- print("-------------------------")
- # 除了最简单的写入字符串还可以写入其他对象,但首先必须转为字符串或字节
- print("写其他对象到文件中:")
- f = open("test.txt", "a+")
- o = ["complicated", "object"]
- f.write("\\n" + str(o))
- f.close()
- print("-------------------------")
- # 字节流方式写入
- print("二进制方式写文件:")
- f = open("test.txt", "ab+")
- f.write(b"012345abcdef")
- f.close()
- print("-------------------------")
- # seek()、tell()
- print("seek和tell方法:")
- f = open("test.txt", "rb+")
- print(f.seek(3)) # 到第四个字节
- print("第四个字节为:" + str(f.read())) # 返回第四个字节开始往后的所有内容
- print("当前位置:" + str(f.tell()))
- f.close()
- print("-------------------------")
- # 使用pickle模块来方便地实现文件到对象,对象到文件
- # 如果是写对象到文件pickle模块会帮我们先将对象转成字符串
- # 对象转成字符串的过程称为pickling
- # 根据字符串构建对象的过程称为unpickling
- print("pickle模块使用:")
- # 略
- def main():
- filetest()
- if __name__=="__main__":
- main()
- #该片段来自于http://www.codesnippet.cn/detail/160720134626.html
来源: http://www.codesnippet.cn/detail/160720134626.html