##因为懂你,所以永恒
            (大多数程序都遵循着输入,处理到输出的模型,首先呢接收用户收入,然后按照要求进行处理,到最后输入数据,目前为止,我们很好地掌握了如何处理数据这块环节,现在希望代码可以自动地去分析操作系统的日志,需要把分析的结果可以保存为一个新的文本,甚至需要和外界进行交流)

##什么是文件

##打开文件


           ※open:我们使用open这个函数来打开文件并返回文件对象
              —第一个参数是file,传入参数名,如果只有文件名的话,不带路径的话,那么python会在当前文件夹里去查找这个文件并打开
              —第二个参数mode,如果要打开的文件不存在,就要看到mode文件的打开模式,如下表,可以到open除了第一个参数是必须写的,其他的都有默认的赋值,如果是只读的方式打开的话,就不要试图对他进行写入,一切的写入都是违法的,不被允许的,如果要写入,必须指定以w的形式写入,如果我们要打开的文件不存在,如果打开模式在w的话,如果文件不存在的话,会创建一个,如果已存在的,那很悲剧,创建的那个会覆盖掉原来存在的那个,如果是x如下表描述,如果想接着写,要用a,不要用w,不然会直接覆盖

##文件对象方法
            (使用open成功地打开一个文件之后,他会返回一个文件对象,拿到这个文件对象,我们就可以读取和修改这个文件了)

            (python和java一样拥有垃圾回收机制,会在文件对象的引用计算器里边,当这个计算器的计数降至0的时候,会自动关闭文件,所以在python编程中,如果忘记关闭文件,不会造成内存泄露那么严重,但也不是大可不必关闭文件,如果你的文件操作里边有写入操作的话,那么你应该在完成写入之后进行关闭文件,因为python他会缓存你的写入数据,那么中途又断点了,那么那些缓存的数据根本就不会写入到文件中,所以为了安全起见,要养成使用完文件立刻关闭的优良习惯,)

(关于文件的读取,主要有read方法和readline方法,可以直接使用list,列表,把文件对象直接转化为列表,也可以对文件对象进行for迭代读取都是可以的,)

(read(),size未给定时,如下,会全部读取完,再次读取取时,就只读取出了一个空字符串,说明已经指向了文件的末尾)

            (文件指针可以认为是一个书签,使用read方法相当于你在读书,读到哪,书签就插到哪,例如指定了5个字符,就会读取5个字符,我们可以使用tell方法,告诉我们书签的位置,也就是当前指针的位置,如下,返回9,因为一个中文字符要站两个字节,四个中文字符加上一个英文的冒号,所以处于9的位置)
            
            (然后可以使用seek()函数来修改文件指针,第二个参数from,0表示从起始位置开始算,1代表从当前位置开始算,2表示从文件末尾开始算起,开始算什么呢第一个参数offset个字节,可以看到他打印出来了,从第45个字节开始打印了一行)
            

(python很灵活,直接使用list的话可以把这个文件对象直接转化为列表)

            (还可以对文件对象进行for循环迭代读取,如下)

(文件的写入主要有write和writelines,writelines是传入一个字符串序列,可以是一个列表,列表里边有很多字符串,就把列表里边的每个字符串依次写进去,但是要注意,如果需要写入文件,要确保之前的打开模式有w或者a)



##温故知新之习题
            0. 下边只有一种方式不能打开文件,请问是哪一种,为什么?

>>> f = open('E:/test.txt', 'w')   # A
>>> f = open('E:\test.txt', 'w')   # B
>>> f = open('E://test.txt', 'w')  # C
>>> f = open('E:\\test.txt', 'w')  # D

答:B不能打开文件。
           Windows在路径名中既可以接受斜线(/)也可以接受反斜线(\),不过如果使用反斜线作为路径名的分隔符的话,要注意使用双反斜线(\)进行转义,否则Python会将反斜线进行转义,例如(\n)看成一个换行符,(\t)看作一个制表符等。

1. 打开一个文件我们使用open()函数,通过设置文件的打开模式,决定打开的文件具有那些性质,请问默认的打开模式是什么呢?
           答:open()函数默认的打开模式是’rt’,即可读、文本的模式打开。

2. 请问 >>> open(‘E:\Test.bin’, ‘xb’) 是以什么样的模式打开文件的?
           答:以“可写入以及二进制模式”打开文件“E:\Test.bin”。

这里要注意的是’x’和’w’均是以“可写入”的模式打开文件,但以’x’模式打开的时候,如果路径下已经存在相同的文件名,会抛出异常,而’w’模式的话会直接覆盖同名文件。

因此,'w’模式打开文件会比较危险,容易导致此前的内容遗失,因此使用’w’模式打开文件前先检查该文件名是否已经存在显得非常重要!下节课小甲鱼会教你如何安全的打开一个文件_

3. 尽管Python有所谓的“垃圾回收机制”,但对于打开了的文件,在不需要用到的时候我们仍然需要使用f.close()将文件对象“关闭”,这是为什么呢?
           答:Python拥有垃圾收集机制,会在文件对象的引用计数降至零的时候自动关闭文件,所以在Python编程里,如果忘记关闭文件并不会造成内存泄漏那么危险。

但并不是说就可以不要关闭文件,如果你对文件进行了写入操作,那么你应该在完成写入之后进行关闭文件。因为Python可能会缓存你写入的数据,如果这中间断电了神马的,那些缓存的数据根本就不会写入到文件中。所以,为了安全起见,要养成使用完文件后立刻关闭的优雅习惯。

4. 如何将一个文件对象(f)中的数据存放进列表中?
           答:list(f),是不是非常的方便!

5.如何迭代打印出文件对象(f)中的每一行数据?
           答:直接使用for语句把文件对象迭代出来即可:

for each_line in f:print(each_line)

6. 文件对象的内置方法f.read([size=-1])作用是读取文件对象内容,size参数是可选的,那如果设置了size=10,例如f.read(10),将返回什么内容呢?
           答:将返回从文件指针开始(注意这里并不是文件头哦)的连续10个字符。

7. 如何获得文件对象(f)当前文件指针的位置?
           答:f.tell()会告诉你^_^

8. 还是视频中的那个演示文件(record.txt),请问为何f.seek(45, 0)不会出错,但f.seek(46)就出错了呢?

>>> f.seek(46)
46
>>> f.readline()
Traceback (most recent call last):File "<pyshell#18>", line 1, in <module>f.readline()
UnicodeDecodeError: 'gbk' codec can't decode byte 0xe3 in position 4: illegal multibyte sequence

答:因为使用f.seek()定位的文件指针是按字节为单位进行计算的,演示文件(record.txt)是以GBK进行编码的,按照规则,一个汉字需要占用两个字节,f.seek(45)的位置位于字符“小”的开始位置,因此可以正常打印,而f.seek(46)的位置刚好位于字符“小”的中间位置,因此按照GBK编码的形式无法将其解码!

##动动手
           0. 尝试将文件( ​ OpenMe.mp3 (700 Bytes, 下载次数: 7051) )打印到屏幕上
           答:直接使用打开文本文件的形式打开即可,至于为什么?打开后会告诉你@_@

f = open('OpenMe.mp3')
for each_line in f:print(each_line, end='')
f.close()

1. 编写代码,将上一题中的文件(OpenMe.mp3)保存为新文件(OpenMe.txt)
           答:

f1 = open('OpenMe.mp3')
f2 = open('OpenMe.txt', 'x')        # 使用”x”打开更安全
f2.write(f1.read())
f2.close()
f1.close()

文件:因为懂你,所以永恒 +习题复习相关推荐

  1. 20210330:二叉树力扣相关习题复习(上)

    20210330:二叉树力扣相关习题复习(上) 题目 思路与算法 代码实现 写在最后 题目 路径总和 II 二叉树的最近公共祖先 二叉树展开为链表 思路与算法 路径总和 II:经典三序遍历二叉树题目, ...

  2. 可视计算机应用期末考试,职称计算机考试photoshop考试习题复习

    职称计算机考试photoshop考试习题复习 导语:photoshop是一个功能强大的应用软件,下面是小编给大家提供的职称计算机考试photoshop考试习题复习,大家可以参考练习,更多习题练习请关注 ...

  3. 106 定积分习题复习及应用(本系列课程上册圆满结束)

    106 定积分习题复习及应用 本系列高等数学视频全集1-106系列视频由汤家凤教授全程讲授,在此致谢汤家风老师 的辛勤付出!也预祝各位同学考研成功! 数学功底好的同学的也可以一起来学习大数据!开启大数 ...

  4. 小甲鱼《零基础学习Python》课后笔记(二十八):文件——因为懂你,所以永恒

    测试题 0.下边只有一种方式不能打开文件,请问是哪一种,为什么? f = open('E:/test.txt','w') # A f = open('E:\test.txt','w') # B f = ...

  5. 解析.DBC文件, 读懂CAN通信矩阵,实现车内信号仿真

    通常我们拿到某个ECU的通信矩阵数据库文件,.dbc后缀名的文件. 直接使用CANdb++ Editor打开,可以很直观的读懂信号矩阵的信息,例如下图: 现在要把上图呈现的信号从.dbc文件中解析出来 ...

  6. 永久存储:腌制一缸美味的泡菜+习题复习

    ##腌制一缸美味的泡菜             (我们之前学习了文件和文件系统,我们知道从一个文件里面去读取字符串是非常简单的,但是你如果要试图读取出数值的话,那么就要多费点周折了,因为无论你是使用r ...

  7. 函数:我的地盘听我的+习题复习

    ##函数与过程            ※函数(function):有返回值            ※过程(procedure):是简单的,特殊并且没有返回值的             (python严 ...

  8. vue、cnpm不是内部文件_UBoot链接文件 搞懂程序内部长什么样

    对于一个程序而言,他们内部的结构.组成通常是不可见的,但是不可见并不意味着其内部是杂乱无章的排布,仅仅是众多的二进制数据拼凑而成.一份源代码生成最终的可执行文件来驱动我们的机器正常工作,中间必经的两个 ...

  9. 计算机操作系统对文件进行管理的体现,计算机操作系统复习之文件管理

    第五章 文件系统 操作系统对系统的软件资源的管理都以文件方式进行,承担着部分功能的操作系统称为文件系统. 本章介绍文件的逻辑组织和在文件存储器上的物理组织:实现"按名存取"和文件共 ...

最新文章

  1. 服务器 主动 推送 客户端浏览器 消息***
  2. uniapp(一) 项目架构,封装
  3. 使用jmeter对ActiveMQ集群性能方案进行评估--转载
  4. 进阶Linux大佬的奠基石
  5. OSG模拟鼠标事件影响操纵器
  6. c均值算法的设计与实现_如何使用C链表实现 LRU 算法
  7. jQuery之防止【冒泡事件】,阻止默认行为 【return false】 event.stopPropagation event.preventDefault...
  8. 仿新浪微博滚动,无文字渐显功能
  9. string赋值-单引号和双引号的区别(php)
  10. 利用深度学习识别番茄早期植株中的塔图绝对菌
  11. 管理感悟:主管要怎样开会才正确
  12. MUSIC算法相关原理知识(物理解读+数学推导+Matlab代码实现)
  13. python win32api键盘_python基于win32api实现键盘输入
  14. 统计信号处理基础 习题解答3-9
  15. 乐高机器人投篮编程_乐高机器人WeDo编程和EV3编程课能学到什么
  16. 资深3D游戏建模师的酸甜苦辣
  17. Java毕业设计(项目课程)大全
  18. Php微信拉黑,微信被拉黑或删除?用这个方法强制聊天
  19. BLE MESH----Mesh beacons
  20. 170713 逆向-填数游戏

热门文章

  1. 关系型数据库理论基础阐释
  2. 编译原理——词法分析(1)
  3. 最简单的方法!UEFI引导+GPT分区安装win10+Ubuntu16.04双系统
  4. 步进电机每转步数和步进角关系:每转步数 = 360°/歩进角
  5. 纸上得来终觉浅|解决mac m1芯片安装homebrew下载失败以及速度慢的问题
  6. java 线程池 优先队列_(十六)java多线程之优先队列PriorityBlockingQueue
  7. rnnlm源码分析(二)
  8. 你觉得java与嵌入式学哪个好?
  9. matlab fprintf输出矩阵
  10. 竞价排名的优点与缺点-金瑞帆建站