Learn Python By Practice — 文件读写

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值