• python基础--文件操作


    打开文件

    f=open('笔记2.txt','a+',encoding='utf-8')

    文件打开的方式--如果打开文件没有指定默认读模式

    r 读模式 文件不存在是报错,不可写
    r+ 读写模式 文件不存在时报错
    w 写模式 不可读,写的内容会覆盖之前的内容
    w+ 写读模式 写的内容会覆盖之前的内容
    a 追加不可读
    a+ 追加读写模式 文件不存在是新建,可读可写,追加不覆盖

    文件方法

    f=open('笔记2.txt','w+',encoding='utf-8')#打开文件
    with open('a.txt','w') as f,open('b.txt','r') as f2: #with,自动的关闭文件,也可以打开多个文件,逗号隔开即可
        f.write('hhhhh')
    print(f.read())#读文件
    print(f.readline())#只读取一行
    print(f.readlines())#读取所有的内容,返回的是list,每行都是一个list元素
    f.write(names)#write只接收str
    #注:f.writelines(names)接受字符串,会自动循环每一个字符,降低效率,用f.write()即可
    f.writelines(names)#writelines传入的可迭代的对象,包括list,tuple,dict f.seek(0)#seek移动指针,但对读有效,对写无效,移动后写还是写在最后 f.truncate()#清空文件内容 print(f.tell())#查看当前文件指针的位置
    f.flush()#立即将缓冲区的内容直接写在磁盘里,为了解决有时写了内容,文件中看不见的问题
    f.close()#关闭文件
    #图片、硬盘、视频等非文本格式的文件时,打开方式后边写‘b’,以二进制形式打开(rb,wb,ab)
    f=open('11.png','rb')
    print(f.read())

    文件指针

    #问题1
    f=open('笔记2.txt','a+',encoding='utf-8')
    print(f.read())
    #问题2
    f=open('笔记2.txt','w+',encoding='utf-8')
    f.write('666'+'
    ')
    print(f.read())
    #问题3
    print(f.readline())#只读取一行
    print(f.readlines())#读取所有的内容,返回的是list,每行都是一个一个list元素,上边read了第一行,再read指针就到了第二行,从第二行开始读
    '''
    问题1:打开笔记2后read为空,因为以“a+”模式打开文件,默认指针指向最后,所以读不出内容,需要手动把指针指向文件开始
    问题2:write后,read为空,因为write后指正指向文件末尾,需要重新打开文件或指定指针位置       
    问题3:读取一行后,再读,发现少了第一行,是因为指针到了第二行,从第二行开始读 
    '''

    高效处理文件实例 

    #内存8G,文件7g,打开,把所有内容放在了内存里,一下内存就满了,电脑就卡死了
    #解决,读一行处理一行,readline不可以,因为不知道多少次
    fw=open('lsy.txt',encoding='utf-8')
    #直接循环文件对象的话,就是循环文件里的每一行
    for f in fw:
        f =f.strip()
        nu=f.split(',')
        print(nu)

    文件修改

    #方法一:#缺点文件太大,会很慢
    with open('a.txt','a+',encoding='utf-8') as f:
        f.seek(0)
        num=f.read()
        new_num=num.replace('1','6')
        f.seek(0)
        f.truncate()#清除不掉,因为指针已经到末尾了
        f.write(new_num)
        f.flush()
    #方法二:
    import os
    with open('a.txt',encoding='utf-8') as f,open('a1.txt','w',encoding='utf-8') as f2:
        for line in f:
            new_line=line.replace('2','6')
            #问题 没有办法清空,因为指针已经到了第2行,解决再打开一个文件
            f2.write(new_line)
    os.remove('a.txt')
    os.rename('a1.txt','a.txt')
    
    
    
    
    
  • 相关阅读:
    java进阶知识--File类
    java进阶知识--函数式接口
    java进阶知识--Lambda表达式、递归
    java进阶知识--线程池
    java进阶知识--线程安全
    java进阶知识--多线程入门
    java基础知识--异常
    java基础知识--可变参数
    mysql中如何不重复插入满足某些条件的重复的记录的问题
    有关map中使用iterate迭代器遍历的不保序问题和list remove(object)的细节问题
  • 原文地址:https://www.cnblogs.com/alasijia/p/8110642.html
Copyright © 2020-2023  润新知