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.oschina.net/code/snippet_111708_15853