查看: 73|回复: 0

ESP32 / ESP8266 MicroPython教程:读取文件

[复制链接]
  • TA的每日心情

    2018-1-11 13:58
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2019-5-16 11:46 | 显示全部楼层 |阅读模式


    引言
    本篇ESP32 / ESP8266 MicroPython教程主要说明如何从MicroPython的文件系统中读取一个文件。本教程在 esp32 和 esp8266 上进行了测试。
    通常我会使用Putty与MicroPython命令行界面进行交互。但是为了演示,我在本篇教程中会使用Arduino Serial Monitor与设备进行交互。因为它也要与设备之间建立串行连接,所以这种交互方式其实与使用Putty没有什么不同。
    打开Serial Monitor之后,只需选择正确的COM端口和波特率(115200)即可。请注意,我们还需要在波特率左边的下拉列表中选择回车或回车&换行选项,以使命令行界面知道命令终止。
    您也可以使用Putty或其他您喜欢的其他软件与设备进行交互。

    代码
    首先,我们会在MicroPython文件系统中新建一个文件。有关如何新建文件的详细教程,请参考前面这一篇文章 ESP32 / ESP8266 MicroPython教程:写入文件 。我们会创建一个名为initialFile.txt的文件,并向文件中写入两行文本。然后,我们会关闭文件并列出当前文件夹下的所有文件,以确认其创建成功。

    kittenblock中小学创客名师推荐的图形化编程软件

    file = open ("initialFile.txt", "w")
    
    file.write("First Line \n")
    
    file.write("Second Line")
    
    file.close()
    
    
    
    import os
    
    os.listdir()
    代码运行之后,您将看到与图1类似的输出结果。
    1 - 将初始文件写入文件系统。
    然后,我们仍然使用open(打开)函数将文件打开,该函数的第一个参数是文件名称,但是现在我们将第二个参数设置为字符串“r“,表示我们想要读取文件内容。
    然后只需调用file(文件)对象的read(读取)https://docs.python.org/3/library/io.html#io.BufferedIOBase.read方法,即可读取完整的文件内容。该方法可以接收一个输入参数,表示要从文件中读取的字节数。如果没有输入参数,那么它就会读取全部内容,直到文件结尾。
    我们将在无参数条件下调用这个方法,所以测试结果将会返回完整的文件内容。在调用之后,您就会看到被打印出来的文件内容。注意换行符也会显式打印出来。
    最后,调用close(关闭)方法,关闭文件。
    [mw_shl_code=applescript,true]file = open("initialFile.txt", "r") file.read() file.close()
    我们可以使用readline方法https://docs.python.org/3/library/io.html#io.TextIOBase.readline(该方法会返回文件中的一行内容)代替read方法,然后重复上述测试。该方法会接收一个输入参数,以指定要从文件内一行内容中读取的最大字符数,一旦接收到指定数量的字符或者到达行尾,该方法就会停止执行。如果不指定任何参数,它就会读取一整行。因为文件中一共有两行文本,所以我们将调用它两次(都不指定参数)。
    一旦到达文件末尾,该调用会返回一个空字符串https://docs.python.org/3/library/io.html#io.TextIOBase.readline。所以,如果我们无法提前知道行数,那么可以将此作为停止条件。最后,同样通过调用close(关闭)方法将文件关闭。

    kittenblock中小学创客名师推荐的图形化编程软件

    file = open("initialFile.txt", "r")
    
    file.readline()
    
    file.readline()
    
    file.close()
    两组命令的运行结果如下所示。

    2 - 两种不同方法的文件读取结果。


    如图2所示,readline方法会将“\n”字符也打印出来。如果不想看到这个字符,可以在返回的字符串上调用rstrip方法https://www.tutorialspoint.com/python/string_rstrip.htm,它的输入参数是一个字符串,内容是想要从右边删除的一组字符。如果没有找到这组字符,那么什么都不会发生。我们可以调用这个方法,并将“\n”字符作为参数传递给它。

    kittenblock中小学创客名师推荐的图形化编程软件

    file = open("initialFile.txt", "r")
    
    
    
    file.readline().rstrip("\n")
    
    file.readline().rstrip("\n")
    
    
    
    file.close()
    运行结果如图3所示,“\n“字符没有再显示出来。由于在原来的字符串中,“\n“前面加了一个空格,所以显示结果的第一行末尾也有一个空格。
    3 - 删除字符串末尾的“\n”字符。

    为了避免在文件系统中留下垃圾,我们将调用os模块的remove函数(输入参数为文件名)将文件删除。此时调用listdir函数,就不会再看到我们创建的文件了。
    4所示是该命令的输出结果。如图所示,只有boot.py一个文件。请不要删除这个文件。

    4 - 从MicroPython文件系统中删除文件。
    最后说明
    最后,我会给您提供一个非常有用的方法,可以帮助您获取对象的可用方法和函数。这个办法其实很简单,只需将目标对象作为输入参数调用dir函数https://docs.python.org/2/library/functions.html#dir即可。
    您会看到如图5所示的列表,其中包括了一些对象的可用方法。在您手头没有文档的情况下,这种方法非常有用。

    5 - 列出对象的可用方法。

    查看更多ESP32/ESP8266教程和项目,请点击 : ESP32教程汇总贴
    英文版教程 ESP32 tutorial



    打赏作者鼓励一下!
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    请问一下微动开关 4X4矩阵键盘 16按键  怎么接ardiuno的 接口?
    请问一下微动开关 4X4矩阵
    请问下这款微动开关 4X4矩阵键盘 16按键的 8个接口分别接单片机的什么口,我
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Nano 一直显示上传,不显示上传成功。
    Nano 一直显示上传,不显
    前面用的还好好的,突然就传不上程序了。一直停留在上传状态中,就是不限显示上传成功
    【项目】基于Arduino Nano的多功能桌面感应垃圾桶
    【项目】基于Arduino Nano
    基于Arduino Nano的多功能桌面感应垃圾桶随着大学生活不断往前迈进,宿舍桌面上的杂物
    Arduino板接74HC拓展接驱动器接多个四项电机
    Arduino板接74HC拓展接驱
    一个Arduino板能不能接多个74HC595来得到多个拓展? 如果能的话要怎么接啊? 如果接
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表