文件操作

  • 大家应该都知道,平时操作文件是在内存中操作的,当断电的或者关闭的情况下内容是会丢失的,如果想永久保存文件该怎么办?

    • 答案是保存到硬盘里,那应用程序怎么直接操作硬件呢?这就需要了解一下计算机系统,计算机系统分为,计算机硬件、操作系统、应用程序三部分,操作系统会把硬件操作封装成简单的借口供应用程序调用,这样用户就可以通过应用程序将数据永久的保存在硬盘了。

  • python中操作文件的过程

    # 打开一个文件,赋值给一个变量(拿到文件句柄)
    >>> f = open('a.txt',encoding='utf-8')
    # 读取文件
    >>> f.read()
    '你好啊'
    # 关闭文件 
    >>> f.close()
    ​
    # 分析一下上面的操作过程
        首先从硬盘读取文件读到内存
        进行读取的操作
        关闭文件

    第一点:注意!!!
    # 资源回收包括操作系统打开的文件和应用系统的变量,操作完毕后一定要记得回收。
    >>> f.close()  # 关闭文件
    >>> del f   # 删除变量
    ​
    # 关闭文件一定要在删除变量后边,否则会导致文件不关闭,白白的浪费内存资源。但是在python中应用系统的变量当你操作完后会进行自动回收,所以用户只需要进行关闭文件操作即可。
    ​
    # 有些人会觉得这样操作起来会很麻烦,每次都需要记得关闭,接下来推荐一个非常简单的方法,利用with关键字来帮助管理上下文
    >>> with open('a.txt',encoding='utf-8') as f:   # as f相当于赋值变量
    ...     f.read()
    ...
    '你好啊'
    ​

    第二点:注意!!!
    # 字符编码问题
        1. 上边操作可以看到指定了encoding='utf-8',是操作这个文件的编码格式
        2. 用什么编码格式写入一定要用什么编码格式打开,否则会出现问题
    

      

  • 打开文件的模式


上图具体的用法
# r: 读方式 (默认方式)
# w: 写方式 (如果文件不存在会创建文件,如果文件存在会清空文件)
>>> with open('a.txt','w',encoding=''utf-8) as f:
...     f.write('你好吗,python')
   
# r代表转义所有的意思,因为\n \r是由特殊意义的;也可以使用“\”行转义
  # with open('C:\\Users\\Administrator\\Desktop\\a.txt',encoding='utf-8') as f:
>>> with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f:
...     f.read()
...
'你好吗,python'# a: 追加方式 (如果文件不存在会报错,如果文件存在则追加到文件末尾)
>>> with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f:
...     f.read()
...
'你好吗,python我很好'# 一下操作在编辑器中操作(sublime)
为什么内容会在一行呢?是因为python让我们自己写换行符
with open(r'C:\Users\Administrator\Desktop\a.txt','a',encoding='utf-8') as f:
    f.write('我不换行\n我换行了')
    
with open(r'C:\Users\Administrator\Desktop\a.txt','r',encoding='utf-8') as f:
    f = f.read()
    print(f)
你好吗,python我很好我不换行
我换行了
View Code


# 如果要操作图片、视频这样格式的就要用到b模式,以字节的格式操作(所以的文件都是以字节的方式存储的),只用字节模式时不可以指定字符编码
b: 字节模式
rb
wb
ab

# 如果我既想读又想写怎么办?
使用 +实现可读可写
r+
w+
a+
with open(r'C:\Users\Administrator\Desktop\a.txt','r+',encoding='utf-8') as f:
    f.write('今天是周日\n')
​
with open(r'C:\Users\Administrator\Desktop\a.txt','r+',encoding='utf-8') as f:
    f = f.read()
    print(f)
今天是周日
  • 操作文件的方法

    读文件
    # f.read() (一次读取全部内容)
    with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f:
        f = f.read()
        print(f)
    今天是周日
    明天是周一
    后天是周二
    # f.readline() (一次读取一行)
    with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f:
        f1 = f.readline()
        f2 = f.readline()
        f3 = f.readline()
        print(f1,f2,f3)
    今天是周日
    明天是周一
    后天是周二
    ​
    # f.readlines() (读取每一行内容,生成一个列表)
    with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f:
        f = f.readlines()
        print(f)
    ['今天是周日\n', '明天是周一\n', '后天是周二']
    ​
    写文件
    f.write()   # 以文本格式写入
    with open(r'C:\Users\Administrator\Desktop\a.txt','w',encoding='utf-8') as f:
        f.write('你好啊')
    ​
    f.write('你好啊',encode='utf-8')   # 针对b模式的写入
    

     

  • 文件的定位操作

    • read(3):

      文件打开方式为文本模式时,代表读取3个字符

      文件打开方式为b模式时,代表读取3个字节

      • seek,tell 方法都是以字节方式移动的

      • tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后

        seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。from变量指定开始移动字节的参考位置。

        如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置

    with open(r'C:\Users\Administrator\Desktop\a.txt',encoding='utf-8') as f:
    f1 = f.read(2)  # 读取两个字符
    t1 = f.tell()   # 获取当前位置
    t2 = f.seek(0,0)    # 移动开开头
    print('读取的两个字符: %s\n现在的位置: %s' % (f1,t1))
    print(t2)
    读取的两个字符: aa
    现在的位置: 2
    0
posted @ 2018-10-28 20:13  浩小白  Views(85)  Comments(0Edit  收藏  举报