• python学习笔记三 文件操作(基础篇)


    文件操作

    打开文件

    open(name[,mode[,buffering]])   open函数使用一个文件名作为强制参数,然后返回一个文件对象。[python 3.5 把file()删除掉]
     
    with open(somefile.txt,'r') as files:
      do_something(files)
    with 语句打开文件并把值赋值到变量,之后可以对文件操作。文件在语句结束之后会自动关闭,即使异常引起也会退出。
     
    文件模式
    r   #只读模式(默认)
    w(>) #写模式
    a (>>)  #追加模式
    b (二进制模式,如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注;可添加到其他模式中使用)
    + (读/写模式,可添加到其他模式中使用)
    U (表示在读取时,可以将 自动转换成 与 r 或 r+ 模式同使用)
     
    基本文件方法:
    读文件内容
    #一次性读取所有内容到内存
    obj.read()
    #读取文件中的所有行并将其作为列表返回
    obj.readlines()
    #一次仅读取一行(从当前位置开始一直到一个换行符的出现,也读取这个换行符)
    obj.readline()
     
    写文件内容
    #写入字符串
    obj.write('内容')
    #写入字符串列表(实际上任何序列和可迭代的对象都行),它会把所有的字符串写入文件。
    writelines(list)
     
    随即访问
    seek(offset[,whence])
    把当前位置(进行读和写的位置)移动到由offset定义的位置,whence.offset是一个字节(字符)数,whence默认是0,表明偏移量是从文件头
    开始计算的(偏移量必须是非负的)whence可以被设置为1(相对于当前位置的移动,offset可以是负的)或者2(相对于文件结尾的移动 )
    f = open('test2.txt','w')
    f.write('01234567890123456789')
    f.seek(5) 
    f.write('hello, world!')
    f.close()
    f = open('test2.txt','r')
    line = f.read()
    print(line)
    f.close()
    
    01234hello, world!89

    truncate #截断数据,仅保留指定之前数据
    f = open('test2.txt')
    f.seek(4)
    f.truncate() #截断f.seek(4)以后的所有数据,仅保留之前的。
    f.close()

    tell返回当前文件的位置

    f = open('test2.txt')
    f.read(2)
    f.read(3)
    print(f.tell())
    f.close()
    5

    #假设文件中包含中文
    f = open('test2.txt','r',encoding='utf-8')
    a = f.seek(2) #文件报错,因为一个汉字占3个字节,seek是按照字节位移

    (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbd in position 0: invalid start byte

    b = f.read(2) #读取字符,(在以前版本中一个汉字占3个字节,单读取2个字节将会出现乱码)
    print(a)
    c = f.tell() #返回值还是按照字节来的。
    print(b)


    好0
    4
     
    关闭文件
    obj.close()
    如果想确保文件被关闭了,可以使用try/finally语句,并且在finally自居中调用close方法。
    #Once your file here
    try:
        #Write data to your file
    finally:
        file.close()

     迭代文件内容和文件对象

    read(),readline(),readlines()前面都已经提到过,下面介绍另一种方法fileinput

    在对一个比较大的文件进行迭代行的操作时,readlines()会占用大量的内存,既可以使用while循环和readline,还可以使用for循环来实现行的迭代。

    import fileinput  
    for line in fileinput.input(filename): #便于遍历多个输入流中的行。
        print(line)

    fileinput模块中的函数

    input(files[,inplace[,backup]])   #便于遍历多个输入流中的行

    filename()              #返回当前文件的名称

    lineno()              #返回当前(累计)的行数

    filelineno()              #返回当前文件的行数

    isfirst()              #检查当前行是否是文件的第一行

    isstding()             #检查当前最后一行是否来自sys.stdin

    nextfile()              #关闭当前文件,移动到下一个文件

    close()               #关闭序列

    文件迭代器

    f = open(filename)
    for i in f:
        print(i)
    f.close()

    可以对文件迭代器执行和普通迭代器相同的操作,比如将它们转换为字符串列表(list(open(filename))),这样所达到的效果和readlines一样。

    f = open('log.txt','w')
    f.write('aaa
    ')
    f.write('bbb
    ')
    f.write('ccc
    ')
    f.write('ddd
    ')
    f.close()
    lines = list(open('log.txt'))
    print(lines)
    
    ['aaa
    ', 'bbb
    ', 'ccc
    ', 'ddd
    ']
  • 相关阅读:
    到现在为止中国荣获43金
    php fpdf 生成表格总结
    今天,开心``
    js 浮动层实现方法
    奥运,刘翔,CSDN,菲尔普斯,中国
    marc 数据基本字段
    Windows mobile下获取系统图标
    HTTP协议学习笔记
    UNIX网络编程学习(14)使用select正确处理EOF的str_cli函数修订版
    ARP协议学习笔记
  • 原文地址:https://www.cnblogs.com/koka24/p/5137147.html
Copyright © 2020-2023  润新知