当前位置:   article > 正文

文件和数据格式化---Python语言程序设计笔记7(北理工mooc)_fo.write(','.join(str(x)))

fo.write(','.join(str(x)))

Python语言程序设计笔记7(北理工mooc)

文件和数据格式化

文件的使用

文件是数据的抽象和集合,是存储在辅助存储器上的数据序列,是数据存储的一种形式,一般有文本文件和二进制文件两种展现形态。
文本文件和二进制文件只是文件的展示形式,所有文件的存储都是以二进制形式存储。

  • 文本文件:由单一特定编码组成的文件,如UTF-8编码。因此也被看成存储着的字符串,适用于例如.txt,.py文件。
  • 二进制文件:直接由0,1组成,没有统一的字符编码,一般存在0和1的组织结构,即文件格式,适用于如.png,.avi文件。
    任何形式的文件,均可以二进制形式打开。
文件的打开关闭

文件的处理步骤:打开-操作-关闭。在操作之前要打开文件,操作完后要关闭文件,需要这一特定步骤是因为需要在文件的存储状态和占用状态之间进行切换。

<变量名> = open(<文件名>, <打开模式>, <编码>)

    变量名也称为文件句柄,文件名处为文件路径和名称,和源文件同目录时可以省略路径,打开模式为文本或二进制(rt或rb),读或写,编码默认为GBK。
    绝对路径的表示:在windows下路径用 \ 表示,如F:\pyy\sas.txt,但在python中,\被用作转义符,需要将 \ 换成 / 或 \\。
    相对路径的表示:假设程序的文件存储在F盘的根目录下,那么文本文件的相对路径就是 .\pyy\sas.txt,若文本文件和程序文件在同一目录下,直接使用文件名即可。
    打开模式:
    在这里插入图片描述

    f = open("f.txt")  #文本形式,只读,默认值
    f = open("f.txt", "rt")  #文本形式,只读,和默认值相同
    f = open("f.txt", "w")  #文本形式,覆盖写模式,会删除原有数据,写入新数据
    f = open("f.txt", "a+")  # 文本形式,追加写模式加读文件,在原有数据的后面写入新的数据,有加号时可以读取文件红原本的数据,没有则不能
    f = open("f.txt", "x")  #文本形式,创建写模式,没有该文件时,会创建文件并写入数据,若该文件已存在则会报错
    f = open("f.txt", "b")  #二进制形式,只读模式
    f = open("f.txt", "wb")  #二进制形式,覆盖写模式
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    文件的关闭:

    <变量名>.close()

      变量名为前面提到的文件句柄。
      若文件在程序中只被打开没有被关闭,则文件在打开之后在程序运行时会一直处于打开状态,不过在程序正常退出时,python的解释器会自动地关闭文件。

      文件内容读取

      对于文件"中国是个伟大的国家":
      在这里插入图片描述
      在这里插入图片描述文件的遍历方法:

      #遍历全文本,一次性读入---------
      fname = input("请输入要打开的文件名称:")
      fo = open(fname, "r")
      txt = fo.read()  #对全文进行处理
      fo.close()
      #对于体量很大的文件,这种方法会占用大量的时间和内存资源
      
      #遍历全文本,按数量读入---------
      fname = input("请输入要打开的文件名称:")
      fo = open(fname, "r")
      txt = fo.read(2)
      article = txt
      while txt !="":
          txt = fo.read(2)
          article += txt
      fo.close()
      print(article)
      #对于处理大文件,这种方法更加可行有效
      
      
      
      #遍历全文本,一次读入,分行处理---
      #行由回车换行来确定
      fname = input("请输入要打开的文件名称:")
      fo = open(fname, "r")
      for line in fo.readlines():
          print(line)
      fo.close()
      #一次读入文件所有数据,缺点同上
      
      #遍历全文本,分行读入,逐行处理---
      fname = input("请输入要打开的文件名称:")
      fo = open(fname, "r")
      for line in fo:
          print(line)
      fo.close()
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35

      若python在读取文件时出现“UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x89 in position 14: illegal multibyte sequence”错误,可以在打开文件处设置编码为UTF-8,如下:

      fo = open(fname, "r", encoding = "UTF-8")
        数据的文件写入

        在这里插入图片描述
        在这里插入图片描述
        文件指针在函数的每次调用之后都会自动改变。
        假设在将数据写入文件之后想要把文件里的数据输出出来,直接打印会发现没有输出任何结果,这是因为当前文件的指针处于文件的末尾,因此程序只能读取到空字符串,想要打印出数据,将数据的指针移至文件开头即可。

        map()函数:如map(eval, line.split(",")),作用是将第一个参数作用与第二个参数的每个元素,再利用list()、set()等函数,即可完成字符串到列表、集合等类型的转换,如下

        >>> a = "1,2,3,4,5"
        >>> a.split(",")
        ['1', '2', '3', '4', '5']
        >>> list(map(eval, a.split(",")))
        [1, 2, 3, 4, 5]
        >>> set(map(eval, a.split(",")))
        {1, 2, 3, 4, 5}
        >>> tuple(map(eval, a.split(",")))
        (1, 2, 3, 4, 5)
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8

        在获取一个文件的单行数据时,可能会读取到换行符\n,利用字符串的replace方法替换掉\n即可,如line.replace("\n", “”),即可实现删除换行符的操作。

        一维数据格式化和处理

        一维数据的表示
        • 一维有序数据一般用列表进行表示,如ls = [1, 2, 3, 3.33],可以利用for循环遍历来对每个数据进行操作。
        • 一维无序数据一般用集合进行表示,如da = {1, 2, 3, 4, 5},同样地可以利用for循环来完成遍历和对数据的操作。
        一维数据的存储
        • 空格分隔:如1 2 3 4 5 7 9 8,使用一个或多个空格进行分隔,不换行。这种方法不能存储数据中有空格的数据。
        • 逗号分隔:基本和上同理,利用逗号分隔,缺点同理。
          分隔方法一般视具体数据而定,除了空格和逗号,其他的特殊符号也可以完成同样的工作,只要回避掉数据中会出现的符号即可。
        一维数据的读入

        以空格分隔的数据为例:

        fo = open(fname)
        txt = fo.read()
        ls = txt.split()
        fo.close()
        • 1
        • 2
        • 3

        即可将文件中的数据读入ls。使用其他符号时,修改split的参数即可。

        一维数据的写入
        ls = ["1", "2", "3", "4"]
        f = open(fname, "w")
        f.write(" ".join(ls))
        f.close()
        • 1
        • 2
        • 3

        此处列表中的元素必须为字符串,不是字符串利用str函数和map函数修改即可,否则无法使用join分隔。

        二维数据的格式化和处理

        二维数据一般是一种表格形式,由于每一行特点相同,一般使用二维列表来表示如[[1, 2, 3], [4, 5, 6]],遍历可以使用两层的for循环来完成。

        csv格式和二维数据存储

        csv:Comma-Separate Values,用逗号分隔的值,即用逗号分隔的数据,这是一种国际通用的一二维数据存储格式,一般为.csv扩展名,每行一个一维数据,采用逗号分隔,无空行。excel和一般编辑软件都可以读入或另存为csv文件。
        在这里插入图片描述
        存储按行按列均可,一般存储为按行存储,即每一行为大的列表中的一个元素。
        从csv文件读入数据:

        fo = open(fname)
        ls = []
        for line in fo:
            line = line.replace("\n", "")
            ls.append(line.split(","))
        fo.close()
        • 1
        • 2
        • 3
        • 4
        • 5

        写入数据到csv:

        ls = [[], [], []]  #二维列表
        f = open(fname, "w")
        for item in ls:
            f.write(",".join(item) + "\n")
        f.close()
        • 1
        • 2
        • 3
        • 4

        二维列表的遍历:

        ls = [[1, 2], [3, 4], [5, 6]]
        for row in ls:  #遍历每一行
            for column in row:  #遍历每一列
                print(column)
        • 1
        • 2
        • 3
        声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/201798?site
        推荐阅读
        相关标签
          

        闽ICP备14008679号