• Python基础语法 第8节课(打开文件 )


    前言 打开文件有什么用?

    数据是写在文件里面的,open file可以实现 读取数据   写入数据

    打开文件-读取文件数据-写入数据-关闭文件

    文件打开以后(文件的读取read),一定要关闭,否则会引起很多问题。

    1.文件的读取

    ①打开文件:f = open('filename/文件路径')

    ②文件的读取:  f.read() -------→mode = 'r' 、mode = 'rb'

    mode= 'r' 读取模式 默认的模式就是r,可以不写。但是读取时,文件必须存在,不存在读取会报错:没有文件可读取

    #打开文件
    f = open('python_practise.txt')#同一个文件夹下,不需要加路径
    #读取数据
    data = f.read()#read 读取出来的数据是字符串
    print(data)
    #关闭文件
    f.close()

    ♥f.read()读取出来的数据是字符串类型

    f = open('demo.txt')
    data = f.read()
    print(data)
    print(type(data))
    
    '''
    {'age':18,'name':'haha'}
    {'age':20,'name':'popo'}
    <class 'str'>
    '''

    将上例中的两个字符串分割为两个数据存在列表里

    new_data = data.split('
    ')
    print(new_data)
    '''
    ["{'age':18,'name':'haha'}", "{'age':20,'name':'popo'}"]
    '''

    2.写入文件(mode 有'w','a','x')

    ①文件不存在

    mode='w'  覆盖模式

    在w模式下,如果之前没有这个文件,会创建新的文件

    #文件不存在时
    file = open('new_file.txt')#报错!默认的mode='r',当文件不存在时,这样运行是不行的,(需要添加mode为'w'模式)
    #文件不存在时,添加mode='w',可在当前路径下创建一个新的文件:new_file.txt
    file = open('new_file.txt',mode='w')

    完整操作---嗯???运行查看new_file.txt文件的内容,(第9节课的测试文件内容)乱码!!

    默认的是ASCII 编码,是美国的标准,使用中文,必须用国际标准,编码格式是utf-8

    file = open('new_file.txt',mode='w')#添加mode为'w'模式,mode可不写
    #写入数据
    file.write('第9节课的测试文件内容')
    #关闭文件
    file.close()

    即:写入中文,需要指定编码格式utf-8

    file = open('new_file.txt','w',encoding= 'utf-8')#添加编码格式encoding='utf-8'
    #写入数据
    file.write('第9节课的测试文件内容')
    #关闭文件
    file.close()

    添加mode,关键字可不加

     添加编码格式,必须加关键字encoding

    原因是:open()函数的源码如下:

    def open(file,mode ='r',buffering = None,encoding = None,......)

    mode排在第二位,所以关键字可加,可不加,直接用‘w'  ‘a'等,而encoding 排在第四位,必须要加关键字(不加就变成buffering,按照位置参数,一一对应)-----体现了关键字参数的意义。

    坑1:如果之前已经存在同名文件,使用mode='w'模式,会覆盖之前的文件内容,使用要慎重。

    如何解决被覆盖的问题?-----mode='a'  (add的意思) 

    mode='a'  追加模式

    每运行一次,会在文件内,追加一句 ’第9节课的测试文件内容‘

    在a模式下,如果之前没有这个文件,也会创建新的文件

    file = open('new_file.txt','w',encoding= 'utf-8')#追加模式
    #写入数据
    file.write('第9节课的测试文件内容')
    #关闭文件
    file.close()

    mode='x' 独创模式  之前有同名文件,会报错,了解

    mode = 'b' 二进制模式 不能单独使用,要跟r,w组合使用

    图片就是用二进制打开

    file = open('123.gif',mode='rb')
    #读数据
    print(file.read())#打印出一串16进制的数字
    #关闭文件
    file.close()

    mode= 't' 文本模式 上面说的mode ='r'实际上是mode='rt',因为默认都是用txt打开的,所以就可以省略

    mode= '+'加模式 组合使用

    r+ :可以读,也可以写,写是追加到文件里面的

    file = open('new_file.txt',mode='r+',encoding= 'utf-8')
    file.read()#先读
    #写入数据
    file.write('第9节课的测试文件内容')#再写
    #关闭文件
    file.close()

    3.文件的操作之seek

    seek:表示光标在哪里

    ①打开一个文件时,光标在最开始的位置

    ②打开一个文件,W+的模式写入一些数据(没有关闭),再读取,就啥也读不到,因为写完了光标在最末尾,就什么也读不到。(写完关闭文件,再重新打开,就可以读取到文件)

    总结:读取文件时根据光标的移动读取,读取一个字符,光标就移动一个字符

       写入也是一样,每写一个字符,光标就移动一个字符。

    #此时啥也读不到
    f = open('demo.txt','w+')#'w+'可以同时具备可读可写能力
    f.write('new line')
    print(f.read())
    #此时可以读取到数据
    f = open('demo.txt','w+')
    f.write('new line')
    f.close()
    f = open('demo.txt','r')
    print(f.read())
    #结果:new line

    4.readlines 读取每一行,会存放在列表中,每一行的数据就是列表的一个元素

     read()读取的数据是一整个字符串

    举例说明

    #demo.txt文件内容如下
    '''
    one line
    two line
    three line
    '''
    #打开文件
    f = open('demo.txt')
    #读取文件数据
    data = f.readlines()
    print(data)
    #结果:['one line
    ', 'two line
    ', 'three line']

    分行打印看看???结果有空行>.<

    f = open('demo.txt')
    data = f.readlines()
    print(data)
    #分行打印
    for line in data:
        print(line)

    #data列表里,前n-1个元素,每个元素后面都有一个 ,换行,print打印也会换行,导致结果每行数据中间有一个空行 ''' one line two line three line '''

    如何把打印结果里面换行去掉??办法如下:

    ①利用strip() 方法,用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。

    注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。

    f = open('demo.txt')
    data = f.readlines()
    print(data)
    #分行打印
    for line in data:
        print(line.strip())
    '''
    one line
    two line
    three line
    '''

    ②enumerate()函数

    f = open('demo.txt')
    datas = f.readlines()
    print(datas)
    
    for line,data in enumerate(datas):
        if line == len(datas)-1:
            print(data)
        else:
            print(data[:-1])
    '''
    one line
    two line
    three line
    '''

    5.with语句:可以让我们节省关闭文件的操作

    即,有时候会open文件后,没有close

    ①with语句的语法:with open(file) as filename:

    with open('demo.txt') as f:

         (缩进)

    就不需要close了

    with语句被称为上下文表达式

  • 相关阅读:
    swift2.2当中的inout参数的使用
    Swift的7大误区
    Swift 设计指南之 编程规范
    我为什么用 SQLite 和 FMDB 而不用 Core Data
    ios学习笔记——代理设计模式
    ios学习笔记——UIImagePickerController
    ios学习笔记——保存图片到相册
    KVC中setValuesForKeysWithDictionary: (转载)
    ios学习笔记——GCD简介
    ios学习笔记——操作队列NSOperation的基本操作
  • 原文地址:https://www.cnblogs.com/ananmy/p/12853978.html
Copyright © 2020-2023  润新知