python 学习汇总1:文件读写 tcy
发布日期:2021-06-29 14:46:35 浏览次数:2 分类:技术文章

本文共 4616 字,大约阅读时间需要 15 分钟。

文件读写               2018/11/12    ===============================================================================1.1文件对象open(name[, mode[, buffering]],encoding) #打开文件返回文件对象参数:# 1)buffering:0无缓冲;大于1缓冲区大小字节;负数默认缓冲区大小;用 flush 或者 close 时才会更新# 2)字符编码: 默认encoding='UTF-8' ;例如encoding='gbk'读取GBK编码的文件# 3)errors:errors='ignore'忽略错误                        # 编不规范文件(在文件中夹杂一些非法编码字符)会UnicodeDecodeError                        ----------------------------------------------------------------1.2.属性f.closed      #文件已关闭返回Truef.mode       #文件的I/O模式f.name       #文件名称f.newlines  #换行符为None 或其他换行符f.encoding #文件编码----------------------------------------------------------------    1.3.方法f.read([size])      #读文件字符串 (缺省:全部;size:字符串长度;末尾\n)file.readline([n]) #读一行信息    (缺省:读一行;n:读n个字符;尾加\n;)f.readlines()       #读出所有行    (尾\n)['Welcome \n', 'There\n', 'ha\n']f.write(string)      # 将str写文件         f.write('This is a test\n'))#15f.writelines(list)   # 将list中字符串连续写入文件没有换行    f.seek(offset,from_what) #移动文件指针    # 偏移量Offset:指定引用位置移动 offset    # 起始位置from_what:0文件开始(默认);1指针位置,2末尾    f.tell()                        #当前文件位置intf.close()                    #关闭文件返回Truef.fileno()                    #获得文件描述符数字f.flush()                     #清除输出缓冲区刷新输出缓存f.isatty()                     #文件是交互终端=Truef.truncate([size])        #截取文件大小为sizef.fileno()                    #返回一个整数文件描述符f.next                        #返回下一行或StopIteration    ---------------------------------------------------------------1.4.实例# 实例1:f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore')# 实例2:filename=r"C:\somefile.txt"f = open(filename)    while True:    str_text = f.read(); #f.readline();f.readlines():#运用迭代否则占用太多的内存            if not str_text:        f.close        break        def process(string):    print( "Processing: ", string)        process(str_text)    ===============================================================================2.上下文管理    # with应用with open(filename) as f:    pass    # 等价于:try:    f = open('/path/to/file', 'r')    print(f.read())finally:    if f:        f.close()          ===============================================================================        3.迭代    # 1)文件迭代器f = open(filename)for line in f:    process(line)f.close()    # 2)使用fileinput实现懒惰行迭代import fileinput    def process(string):    print( "Processing: ", string)        for line in fileinput.input(filename):    print(line.strip()) # 把末尾的'\n'删掉    process(line)    ===============================================================================    4.综合实例:#计算文件行数    #方法1:计算文件行数def fileline_n(filename):    import os    #os.path.exists(filename) #文件及文件夹存在    if (not os.path.isfile(filename)):        return 'not exit'+filename        n=0    with open(filename,'r') as file:        for line in file: n+=1    return n    filename=r'c:\file_tcy1.txt'print(fileline_n(filename))    # ******************************************************************#方法2:计算文件行数def fileline_n1(filename):    import os    #os.path.exists(filename) #文件及文件夹存在    if (not os.path.isfile(filename)):        return 'not exit'+filename    n=0    with open(filename,'r') as file:        while True:            buffer = file.read(1024 * 8192)            if not buffer:break            n+= buffer.count('\n')    return n=================================================================================

 

 

附录:

文件读写模式类型

r

文件读(默认)

r+   

文件读写

rU或Ua

文件读(提供通用换行符支持)

rb   

文件读(二进制)

rb+   

文件读写(二进制)

w    

文件写(存在清空,无创建)

w+   

文件读写(存在清空,无创建)

wb   

文件写(二进制w)

wb+   

文件读写(二进制+w)

a    

文件读追加(从eof开始追加到文件末尾;无创建)

a+   

读写模式 (参见 a ) 文件指针移到文件尾

ab   

二进制追加模式(参见 a )

ab+   

二进制读写模式打开 (参见 a+ )

二进制文件读写                   2018/6/15    ===============================================================================1.说明:# 1)Windows ASCII文件行尾自动添加行结束符# 2)文本文件没用b模式只允许从文件头计算相对位置# 3)读写复杂二进制数据格式最好使用该struct 模块。# 4)规则数据(如整数或浮点数的同类列表)使用该array模块。    ===============================================================================2.1.一般方式:#二进制文件读写    f = open('/tmp/workfile', 'rb+')    f.write(b'0123456789abcdef')#16f.seek(5)                  # Go to the 6th byte in the filef.read(1)                  #b'5'f.seek(=3, 2)            # Go to the 3rd byte before the end  #13f.read(1)                  #b'd'f.readline()      2.2.struct 方式:#二进制文件读写# 获取一个包含二进制数据(通常是数字)的字符串并将其转换为Python对象; 反之亦然。    #读取两个2字节整数和一个大端格式的4字节整数:import structwith open(filename, "rb") as f:      s = f.read(8)    #b'\xff\xd8\xff\xe1\x00\x18Exif\x00\x00...' # 十六进制字节       x, y, z = struct.unpack(">hhl", s)       说明:    字符串中'>'强制大端数据;     字母'h'读取一个“短整数”(2个字节)    'l'从字符串中读取一个长整数”(4个字节)。      ===============================================================================

转载地址:https://chunyou.blog.csdn.net/article/details/83995012 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:python 学习汇总2-pynput键盘鼠标监控事件tcy
下一篇:numpy 学习汇总2-np.random随机函数 tcy

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月22日 12时04分22秒