Python之文件操作

目录

文件操作

打开文件的两种方式

  1. open('文件名','模式','指定编码')

    # 写入文件
    fw = open("plf.txt","w",encoding = 'utf-8')
    fw.write("我正在写入数据到文件中")
    fw.close()
    
    # 读文件
    fr = open("plf.txt","r",encoding = 'utf-8')
    data = fr.read()
    print("文件内容为:%s"data)
    fr.close()
    
    
    '''
     总结:
         1. 读写文件都需要手动关闭文件,不方便
    
    '''
  2. with open('文件名','模式','指定编码') as 文件名:

    # 写入文件
    with open("plf.txt","w",encoding = 'utf-8') as fw:
     fw.write("我正在写入数据到文件中")
    
    # 读文件
    with open("plf.txt","r",encoding = 'utf-8') as fr:
     data = fr.read()
     print("文件内容为:%s"%data)
    
    
    # 嵌套写法
    with open("plf.txt","r",encoding = 'utf-8') as fr,\
     open("file1.txt",'w',encoding = 'utf-8') as fw:
            for i in fr:
                fw.write(i)
    
    '''
     优点:
         1. 读写文件不需要手动关闭,直接由程序自动关闭,在工作中常使用该方法操作文件
    
    '''
    

操作文件的模式

# 文件plf.txt内容为
'''
文件内容为:Hello World!
咱们都是中国人!
'''


# 读  r
with open("plf.txt","r",encoding = 'utf-8') as fr:
    data = fr.read()
    print("文件内容为:%s"%data)
    
'''
文件内容为:Hello World!
咱们都是中国人!
'''    






# 写  w
with open("plf.txt","w",encoding = 'utf-8') as fw:
    fw.write("我正在写入数据到文件中")
    
'''
我正在写入数据到文件中
'''
    
    
    
    
    
# 追加 a
with open("plf.txt","a",encoding = 'utf-8') as fa:
    fa.write("我正在后面追加文件")
'''
我正在写入数据到文件中我正在后面追加文件
'''
    
    
    
    
    

# 读写 r+
with open("plf.txt","r+",encoding = 'utf-8') as fr_w:
    fr_w.write("Hello World!")
    fr_w.write("咱们都是中国人!")
    data = fr_w.read()
    print("%s"%data)
'''
我正在写入数据到文件中我正在后面追加文件Hello World!咱们都是中国人!
'''







# 读写 w+
with open("plf.txt","w+",encoding = 'utf-8') as fw_r:
    fw_r.write("Hello World!")
    fw_r.write("咱们都是中国人!")
    data = fw_r.read()
    print("%s"%data)
'''
Hello World!咱们都是中国人!
'''







# 读写 a+
with open("plf.txt","a+",encoding = 'utf-8') as fa_rw:
    fa_rw.write("   正在追加数据")
    fa_rw.seek(0,0)   # 设置光标回到文件头
    data = fa_rw.read()
    print("%s"%data)
'''
Hello World!咱们都是中国人!   正在追加数据
'''

'''
    总结:
        常用的模式有(r,w,a,rt,wt,at,rb,wb,ab),通常不推荐可读可写的模式,存在IO问题。
        t模式,代表文本模式
        b模式,代表将文本内容转化为二进制,使用该模式时,不要增加编码
'''

总结:

模式 可做操作 若文件不存在 是否覆盖
r 只能读 报错 -
r+ 可读可写 报错
w 只能写 创建 是,清空再写
w+ 可读可写 创建 是,清空再写
a 只能写(追加) 创建 否,追加写
a+ 可读可写 创建 否,追加写

绝对路径,相对路径

绝对路径:从根目录到某一个文件的路径

相对路径:从当前位置到某一个文件的路径

文件操作的方法

# truncate()  保留从文件头的三个字节(一个中文字符是是三个字节,英文字符为2个字节)
with io.open("plf.txt","w+",encoding="utf-8") as fr_w:
    fr_w.write("你快点走开")
    fr_w.write("咱们都是中国人!")
    fr_w.truncate(3)    
    data = fr_w.read()
    print("%s"%data)
    
    
    
# tell()  返回光标所在的位置(按字节算),除了read()是按字符算,其他文件操作的方法都是按照字节算    
with io.open("plf.txt","w+",encoding="utf-8") as fr_w:
    fr_w.write("你快点走开")
    fr_w.write("咱们都是中国人!")
    num = fr_w.tell()   
    print(num)   
    
# seek 第一个0:光标偏移多个字节  第二个0:有三种模式。0表示光标回到文件头;1表示光标在当前位置进行偏移;2表示光标在文件尾进行漂移    
with io.open("plf.txt","w+",encoding="utf-8") as fr_w:
    fr_w.write("你快点走开")
    fr_w.write("咱们都是中国人!")
    fr_w.seek(0,0)   #
    num = fr_w.tell
    print(num)       

    
# read(n) 不传参默认表示一次性把文件中的内容全读出来,n代表字符个数。除此之外,其他但凡涉及文件指针的都是字节个数   
with open("plf.txt","r",encoding = 'utf-8') as fr:
    data = fr.read()        
    print("文件内容为:%s"%data)

# readline() 读取一行内容    
with open("plf.txt","r",encoding = 'utf-8') as fr:
    data = fr.readline()        
    print("文件内容为:%s"%data)

# readlines()  列表,它会将每一行内容当做一个元素存入列表中  (不推荐,占内存)  
with open("plf.txt","r",encoding = 'utf-8') as fr:
    for i in  fr.readlines():       
        print("%s"%i)
        
# 直接使用文件操作符,来遍历文件内容。(推荐使用)        
with open("plf.txt","r",encoding = 'utf-8') as fr:
    for i in  fr:       
        print("%s"%i)

修改文件的两种方式

  1. 第一种:从A文件读取完数据之后,然后把数据重新写入A文件中(不推荐使用,可能存在IO问题)

    with open('37r.txt','w+') as fr,
        data = fr.read()  # 全部读入内存,如果文件很大,会很卡
        data = data.replace('tank', 'tankSB')  # 在内存中完成修改
        fr.write(data)  # 一次性写入原文件
    
    print('done...')
  2. 第二种:从A文件中读取数据,然后再写入B文件中,最后删除A文件,同时将B文件名改为A文件名

    import os
    
    with open('37r.txt') as fr,\
            open('37r_swap.txt', 'w') as fw:
        # 循环读取文件内容,逐行修改
        for line in fr:
            line = line.replace('jason', 'jasonSB')
            # 新文件写入原文件修改后内容
            fw.write(line)
    
    os.remove('37r.txt')
    os.rename('37r_swap.txt', '37r.txt')
    print('done...')
上一篇:json操作


下一篇:EL与JSTL