zoukankan      html  css  js  c++  java
  • Python 操作文件

    open() 函数

    模式 说明
    r 只读模式
    w 只写模式,文件不存在自动创建;存在则清空再写
    a 只追加写,在文件最后追加写
    r+ 打开一个文件用于读写。文件指针将会放在文件的开头。
    w+ 打开一个文件用于写读,若文件已存在则将其清空,若该文件不存在,创建新文件。
    a+ 打开一个文件用于读写。若文件已存在,文件指针将会在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    这里我们操作的文件
    mytest 内容为:

    1111111111111
    2222222222222
    3333333333333
    

    readline 函数

    f = open('mytest', 'r', encoding="utf8")  # 以读模式打开
    print(f.readline())                       # 读一行内容
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()                                 # 关闭文件
    

    运行结果:

    注意:
    readline 函数会返回一行文件内容,因为 print 函数会换行,而文本中每行有 这个换行符,所以每行内容之间会多了一个空白行。


    readlines 函数

    f = open('mytest', 'r', encoding="utf8")
    print(f.readlines())                                # 读取所有内容,以列表形式返回
    f.close()
    

    运行结果:

    f = open('mytest', 'r', encoding="utf8")
    for i in f.readlines():
        print(i.strip())                 # 通过 strip 函数除去每行后面的 
     换行符
    f.close()
    

    运行结果:


    需求:在文件第二行末尾加入 'klvchen'

    number = 0
    f = open('mytest', 'r', encoding="utf8")
    for i in f.readlines():
        number += 1
        if number == 2:
            print(i.strip()+'klvchen')
        else:
            print(i.strip())
    f.close()
    

    运行结果:

    优化版本(一):

    number = 0
    f = open('mytest', 'r', encoding="utf8")
    for i in f.readlines():
        number += 1
        if number == 2:
            i = "".join([i.strip(), 'klvchen'])
        print(i.strip())
    f.close()
    

    运行结果:

    优化版本(二):

    number = 0
    f = open('mytest', 'r', encoding="utf8")  
    for i in f:                             # for内部将 f 对象做成一个迭代器,用一行取一行,避免占用过多内存
        number += 1
        if number == 2:
            i = "".join([i.strip(), 'klvchen'])
        print(i.strip())
    f.close()
    

    运行结果:


    tell() 函数

    作用:返回文件的当前位置,即文件指针当前位置。

    f = open('mytest', 'r', encoding='utf8')
    print(f.tell())
    print(f.read(10))
    print(f.tell())
    f.close()
    

    运行结果:


    seek() 函数

    作用: 移动文件读取指针到指定位置。

    f = open('mytest', 'r', encoding='utf8')
    print(f.tell())
    print(f.read(10))
    print(f.tell())
    f.seek(0)
    print(f.tell())
    print(f.read(10))
    f.close()
    

    运行结果:


    flush() 函数

    作用: 刷新缓冲区,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
    一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

    import sys, time 
    for i in range(30):
        sys.stdout.write("*")
        sys.stdout.flush()
        time.sleep(0.1)
    

    运行结果:

    注意:这是个进度条的展示

    类似的实现可以使用下面代码:

    import time
    for i in range(30):
        print("*", end='', flush=True) # print 函数也可以设置 flush 参数
        time.sleep(0.1)
    

    在文件第二行后面添加内容

    f_read = open('mytest', 'r', encoding='utf-8')
    f_write = open('mytest2', 'w', encoding='utf-8')
    number = 0
    for line in f_read:
        number += 1
        if number == 2:
            line = ''.join([line.strip(), ' hello 
    '])
        f_write.write(line)
    
    f_write.close()
    f_read.close()
    

    运行结果:

    使用另外一种方法打开文件,open 不需要自己调用 close()方法关闭

    number = 0
    with open('mytest', 'r') as f_read, open('mytest2', 'w') as f_write:
        for line in f_read:
            number += 1
            if number == 2:
                line = ''.join([line.strip(), ' hello 
    '])
            f_write.write(line)
    

    运行结果:

  • 相关阅读:
    控制器之间的通信(传值方法)以及多次调用通信
    关于ios项目沙盒中的文件和Xcode项目创建的文件
    解决cell循环利用造成的重复勾选
    让TabelView视图中自定义的Toolbar固定(不随cell的移动而移动)
    jsonString转NSDictionary
    日期字符串转换 and 两个日期相减
    Java虚拟机 简介
    浅谈操作系统对内存的管理(转)
    Java虚拟机规范(Java SE 7)笔记
    StringUtils
  • 原文地址:https://www.cnblogs.com/klvchen/p/8671015.html
Copyright © 2011-2022 走看看