zoukankan      html  css  js  c++  java
  • 文件操作的常用方法和使用

    文件操作的常用方法

    1、打开文件

    1.os.mknod("test.txt") #创建空文件
    2.f = open("test.txt",w) #直接打开一个文件,如果文件不存在则创建文件
    3.关于open 模式:

    w:以写方式打开,
    a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
    r+:以读写模式打开
    w+:以读写模式打开 (参见 w )
    a+:以读写模式打开 (参见 a )
    rb:以二进制读模式打开
    wb:以二进制写模式打开 (参见 w )
    ab:以二进制追加模式打开 (参见 a )
    rb+:以二进制读写模式打开 (参见 r+ )
    wb+:以二进制读写模式打开 (参见 w+ )
    ab+:以二进制读写模式打开 (参见 a+ )

    2、读

    read        读取整个文件

    f = open('doubi.txt', 'r+', encoding='utf-8')
    data = f.read()
    print(data)
    
    #执行结果为:
    peiqi.abc123.21.chengguan
    alex.abc123.24.IT
    gangniang.abc123.27.dachu

    f = open('doubi.txt','r')
    
    for line in f:
        Print(line) 

    也可以用readline和readlines

    readline    只读一行,遇到 or 为止

    f = open('doubi.txt', 'r+', encoding='utf-8')
    data=f.readline()
    data1=f.readline()
    data2=f.readline()
    print(data)
    print(data1)
    print(data2)
    
    #结果为:                                 
    peiqi.abc123.21.chengguan    
    
    alex.abc123.24.IT
    
    gangniang.abc123.27.dachu     

    readlines   读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便)

    f = open('doubi.txt', 'r+', encoding='utf-8')
    data=f.readlines()
    print(data)
    print(type(data))
    
    #执行结果为:
    ['peiqi.abc123.21.chengguan
    ', 'alex.abc123.24.IT
    ', 'gangniang.abc123.27.dachu
    ']
    <class 'list'>

    另外需要注意的是read是按字符读取,tell和seek是按照字节  切记否则是坑

    tell
    1. 作用:获取当前文件读取指针的位置

    2. 语法格式: file.tell() 注: 此方法没有参数

    seek
    1. 作用:用于移动文件读写指针到指定的位置
    2. 语法格式:file.seek(offset, whence=0):
    --> offset: 偏移量,需要向前或者是向后移动的字节数
    --> whence: 可选值,默认为0, 可选值为1或者2,表示从何处开始计算偏移,具体来说,
      --> 0表示从当前位置开始计算偏移
      --> 1表示从文件头位置开始计算偏移
      --> 2表示从文件尾开始计算偏移
    f = open('doubi.txt', 'r+', encoding='utf-8')
    f.seek(3)            #表示向前移动3个字节
    data = f.tell()     #获取当前指针位置
    print(data)
    f.close()
    
    #结果为
    3
    
    
    # f.seek(0,0)            #表示将文件指针移动到文件头处
    # f.tell()
    #
    # f.seek(0,2)            #表示将文件读取指针移动到文件尾部
    # f.tell()
     注意seek的长度是按字节算的, 字符编码存每个字符所占的字节长度不一样。
     如“你好啊” 用gbk存是2个字节一个字,用utf-8就是3个字节,因此以gbk打开时,seek(4) 就把光标切换到了“好”和“啊”两个字中间。
    但如果是utf8,seek(4)会导致,拿到了飞这个字的一部分字节,打印的话会报错,因为处理剩下的文本时发现用utf8处理不了了,因为编码对不上了,少了一个字节。

    3、写入

    close 是关闭文件的时候才进行保存(将数据从内存中写入硬盘)

    f = open('doubi.txt', 'r+', encoding='utf-8')
    f.seek(9)
    f.write('')                       
    f.close()                            

    flush 把文件从内存buffer里强制刷新到硬盘,多用于循环。

     4、其他

     readable(self, *args, **kwargs): 
            判断是否可读
     seekable(self, *args, **kwargs)
            判断文件是否可进行seek操作
     writable(self, *args, **kwargs): 
            判断文件是否可写

     truncate(self, *args, **kwargs):
            按指定长度截断文件,类似于删除,从指定位置开始往后删除。
            *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

        
     
     
  • 相关阅读:
    C Primer Plus_第三章_数据和C_复习题与编程练习
    如何确定你的编程环境下不同数据类型数据的储值范围
    vs2010调试程序出现“Cannot find or open the PDB file”
    C Primer Plus_第二章_C语言概述_复习题与编程练习
    C Primer Plus_第一章_概览_复习题与编程练习
    [au3]复制选择性粘贴文本到excel
    subversion
    Centos7.0安装配置PHP7.0
    C#的UDP服务器
    CentOS7搭建NAS,包括NFS、ISCSI
  • 原文地址:https://www.cnblogs.com/dexterfan/p/9583347.html
Copyright © 2011-2022 走看看