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

    open()函数

    简介

    预想操作python中的文件(打开/创建/追加),必须使用python的内置函数:open()
    open函数常用参数有两个: 第一个实参,是文件的所在路径(若文件在python中,则写文件名称即可,若文件在电脑中,则需要填写文件的绝对路径,且字符需要转义) 第二个实参,决定了打开文件的模式:只读,写入,追加等。常用的包括r,
    w,a,+,b(后边详细介绍每个字符的含义),如果不传参,默认使用r的方式
    文件操作三步骤:
    1、打开open()
    2、操作read()、write()、seek()
    3、关闭close()
    
    语法
    file = open('filename','mode',encoding='utf-8')
    print(file.read())
    file.close
    
    实例
    file = open('C:Users\User\Desktop\hello.txt','a+',encoding='utf-8') # 追加读写模式,使用a+
    file.write('hello 123')# 追加写内容,使用write()方法
    file.seek(0) # 移动指针位置,使用seek()方法
    print(file.read()) # 读文件,使用read()方法
    file.close # 关闭文件,使用close()方法

    不同模式打开文件的含义

    b   二进制模式,以二进制格式打开或写入,一般用于打开非文本文件,如图片,可与r,w,a,+共同使用,如:rb,rb+,wb,wb+,ab,ab+
    +   打开一个文件进行更新(可读可写),可与r,w,a共同使用,如:r+,w+,a+
    r 读模式,只能读不能写。这是默认模式,打开不存在的文件会报错
    r
    + 读写模式,文件指针将会放在文件的开头,打开不存在的文件会报错
    w 写模式,只能写不能读。
    如果该文件已存在,会把原有文件中的数据覆盖,打开不存在的文件会创建。
    w+  读写模式,如果该文件已存在,会把原有文件中的数据覆盖,打开不存在的文件会创建。
    a   追加模式,打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a
    +
    追加读写模式,打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

    模式rr+ww+aa+
       
     
    创建    
    覆盖        
    指针在开始    
    指针在结尾        

    read()方法--读

    file = open('C:Users\User\Desktop\hello.txt','r',encoding='utf-8')
    
    print(file.read()) # 读取文件中的所有内容
    file.seek(0)
    print(file.readline()) # 按行读取文件中的内容,读取时占用内存小,比较适合大文件
    file.seek(0)
    print(file.readlines()) # 读取整个文件所有行,保存在一个列表(list)变量中,每行作为一个元素,但读取大文件会比较占内存
    print(file.readable()) # 如果文件是可读的,返回 True,否则返回 False
    
    file.close

    write()方法--写

    file = open('C:Users\User\Desktop\hello.txt','a+',encoding='utf-8')
    
    file.write('123
    ') # write()的参数是一个字符串
    file.writelines(['456
    ','456
    ']) # writelines()的参数可以是一个字符串,也可以是一个列表
    file.seek(0)
    print(file.read())
    print(file.writable()) # 如果文件是可写的,返回True,否则返回Flase

    循环文件 

    # 循环取值
    file = open('test.txt',encoding='utf-8') # 打开文件,默认是使用r读模式 for line in file: print(line)
    # 循环写入
    l = ['haha','heihei','hehe','lala']
    
    for i in l:
        f = open('input.txt', 'w+', encoding='utf-8')
        f.write(i)
        f.seek(0)
        print(f.read())
        f.close()
    # 循环写入
    l = ['a', 'b', 'c', 'd', 'e']
    f = open('wxy.txt', 'w', encoding='utf-8')  # 打开一个文件向里边写入
    for i in l:  # 循环list
        f.write(i + '
    ')  # 每循环一次,写入一个值,如果想换行,就在后面加
    
    
    f.writelines(l)  # 传一个list的话,它会帮你循环,把list中的每个元素都写到文件里面,该方法和上边循环的效果一样
    f.close()
    
    f1 = open('wxy.txt', 'r', encoding='utf-8')
    print(f1.read())  # 读取这个文件中的值
    f1.close()

    replace()方法--替换

    练习:把test文件中的xiaolan改成dalan
    
    test文件中内容:
    xiaohei
    xiaobai
    xiaolan
    xiaohong
    # 写法1,
    # 思路:1、读取内容 2、替换 3、清除原来文件的内容 4、把新的内容写进去
    
    
    file = open('test','a+',encoding='utf-8')
    file.seek(0) # 移动指针位置
    result = file.read() #将读取的文件,赋值给result
    content = result.replace('xiaolan','dalan')  # 将result中替换后的信息,赋值给content
    file.truncate(0) # 清空原有文件
    file.write(content) # 将替换后的内容写入到file中
    file.seek(0)
    print(file.read()) # 读取文件
    file.close()
    # 写法2,大文件用这种方式处理
    # 思路:1、逐行处理 2、打开a(要修改的文件)文件,在打开b(空文件)文件
    # 3、从a文件中读一行,修改,修改之后写到b文件中 4、删除a文件,把b文件的名字改成a文件
    f = open('test.txt',encoding='utf-8') # 打开文件,默认是使用r读模式
    f2 = open('test1.txt','a+',encoding='utf-8') # w模式,打开不存在的文件会创建
    
    for line in f:
        result = line.replace('xiaolan','dalan')# 替换文件内容
        # result = line.upper() # 把文件内容转换为大写字母
        f2.write(result)
    f2.seek(0)
    print(f2.read())
    f.close()
    f2.close()
    
    import os
    os.remove('test.txt') # 将test.txt文件删除
    os.rename('test1.txt','test.txt') # 将test1.txt重命名为test.txt
    学而时习之不亦说乎!
  • 相关阅读:
    8086汇编 学习1
    微信小程序 websocket+node.js(ws)
    kali安装google 浏览器
    bugkuctf Easy_Re
    课设记录-Day06
    GitLab使用教程
    课设记录-Day05
    课设记录-Day04
    课设记录-Day03
    课设记录-Day02
  • 原文地址:https://www.cnblogs.com/wxinyu/p/14832467.html
Copyright © 2011-2022 走看看