Leaf-Salix.github.io

my blog

View on GitHub

7.文件和数据格式化

7.1 文件的使用

文件的类型

文件的打开和关闭

文件内容的读取

数据的文件写入

7.2 实例11:自动轨迹绘制

“自动轨迹绘制”问题分析

“自动轨迹绘制”实例讲解

#AutoTraceDraw.py
import turtle as t
t.title('自动轨迹绘制')
t.setup(800,600,0,0)
t.pencolor("red")
t.pensize(5)
#数据读取
datals=[]
f=open("data.txt")
for line in f:
    line=line.replace("\n","")
    datals.append(list(map(eval,line.split(","))))
    #map可以将第一个参数的功能作用于第二个参数(列表,组合数据类型)的每个元素
    #即用line.split生成一个包含多个“内容为数字的字符串”的列表
    #用map(eval,列表)将列表中的每个数字字符串变成数字
    #将整个列表当作一个元素放入列表datals末尾
f.close()
#自动绘制
for i in range(len(datals)):
    t.pencolor(datals[i][3],datals[i][4],datals[i][5])
    t.fd(datals[i][0])
    if datals[i][1]:
        t.right(datals[i][2])
    else:
        t.left(datals[i][2])
---
在同目录下创建data.txt输入
300,0,144,1,0,0
300,0,144,0,1,0
300,0,144,0,0,1
300,0,144,1,1,0
300,0,108,0,1,1
184,0,72,1,0,1
184,0,72,0,0,0
184,0,72,0,0,0
184,0,72,0,0,0
184,1,72,1,0,1
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,72,0,0,0
184,1,720,0,0,0

或者点这里使用右键,另存为的方式下载data.txt

“自动轨迹绘制”举一反三

7.3 一维数据的格式化和处理

数据组织的维度

一维数据的表示

一维数据的存储

一维数据的处理

7.4 二维数据的格式化和处理

二维数据的表示

CSV格式于二维数据的存储

二维数据的处理

7.5 模块6:wordcloud库的使用

wordcloud库基本介绍

wordcloud库使用说明

7.6 实例12:政府工作报告词云

“政府工作报告词云”问题分析

“政府工作报告词云”实例解析

“政府工作报告词云”举一反三

练习

  1. 文件行数

    描述

    打印输出附件文件的有效行数,注意:空行不计算为有效行数。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    这是仅给出输出格式样例,不是结果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 `` 共100行
    f=open("latex.log","r")
    cnt=0
    for line in f.readlines():
        if line=='\n':
            continue
        else:
            cnt+=1
    print("共{}行".format(cnt))
    ---
    f = open("latex.log")
    s = 0
    for line in f:
        line = line.strip('\n')
        if len(line) == 0:
            continue
        s += 1
    print("共{}行".format(s))
    需要注意for line in f方式获得的每行内容在变量line中包含换行符所以要通过strip()函数去掉换行符后再进行统计这里空行指没有字符的行
    
  2. 文件字符分布

    描述

    统计附件文件的小写字母a-z的字符分布,即出现a-z字符的数量,并输出结果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    同时请输出文件一共包含的字符数量。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    注意输出格式,各元素之间用英文逗号(,)分隔。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    答案可能包含a-z共26个字符的分布,如果某个字符没有出现,则不显示,输出顺序a-z顺序。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    仅格式示例,非最终答案。 ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 `` 共999字符,a:11,b:22,c:33,d:44,e:55
    f=open("latex.log")
    txt=f.read()
    dic={}
    for i in txt:
        if 'a'<=i<='z':
            dic[i]=dic.get(i,0)+1
    print("共{}字符".format(len(txt)),end="")
    for i in range(ord('a'),ord('z')+1):
        if dic.get(chr(i),0)!=0:
            print(",{}:{}".format(chr(i),dic[chr(i)]),end="")
    ---
    f = open("latex.log")
    cc = 0
    d = {}
    for i in range(26):
        d[chr(ord('a')+i)] = 0
    for line in f:
        for c in line:
            d[c] = d.get(c, 0) + 1
            cc += 1
    print("共{}字符".format(cc), end="")
    for i in range(26):
        if d[chr(ord('a')+i)] != 0:
            print(",{}:{}".format(chr(ord('a')+i), d[chr(ord('a')+i)]), end="")
    使用 ord('a')+i 配合 range()函数 可以遍历一个连续的字符表
    
  3. 文件独特行数

    描述

    统计附件文件中与其他任何其他行都不同的行的数量,即独特行的数量。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    此处仅示例输出格式。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 `` 共99独特行
    ans=0
    f=open("latex.log")
    txt=f.readlines()
    dic={}
    for lines in txt:
        if dic.get(lines,0)==0:
            dic[lines]=1
            ans+=1
        elif dic[lines]==1:
            dic[lines]=2
            ans-=1
    print("共{}独特行".format(ans))
    ---
    f = open("latex.log")
    ls = f.readlines()
    s = set(ls)
    for i in s:
        ls.remove(i)
    t = set(ls)
    print("共{}独特行".format(len(s)-len(t)))
    记住如果需要"去重"功能请使用集合类型
       
    ls.remove()可以去掉某一个元素如果该行是独特行去掉该元素后将不在集合t中出现
    
  4. CSV格式列变换

    描述

    附件是一个CSV文件,请将每行按照列逆序排列后输出,不改变各元素格式(如周围空格布局等)。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    这是一个格式示例,不是正确结果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 (以下是文件内容) 1,2,3,4 a,b,c,d 4,3,2,1 d,c,b,a
    f=open("data.csv")
    txt=f.readlines()
    ls=[]
    for line in txt:
        line=line.replace('\n',"")
        lt=line.split(',')
        lt.reverse()#lt=lt.reverse()
        ls.append(lt)
    for lt in ls:
        print(','.join(lt))
    ---
    f = open("data.csv")
    for line in f:
        line = line.strip("\n")
        ls = line.split(",")
        ls = ls[::-1]
        print(",".join(ls))
    f.close()
    
  5. CSV格式数据清洗

    描述

    附件是一个CSV文件,其中每个数据前后存在空格,请对其进行清洗,要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (1)去掉每个数据前后空格,即数据之间仅用逗号(,)分割;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (2)清洗后打印输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    这里是一个格式示例,不是正确结果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 (在文件中) 1, 2, 3, 4, 5 'a', 'b' , 'c' , 'd','e' 1,2,3,4,5 'a','b','c','d','e'
    f=open("data.csv")
    for line in f:
        line=line.replace(" ","")
        print(line,end="")
    ---
    f = open("data.csv")
    s = f.read()
    s = s.replace(" ","")
    print(s)
    f.close()
    该CSV文件的每个数据中不包含空格因此可以通过替换空格方式来清洗如果数据中包含空格该方法则不适用
    

测验

单项选择题

  1. 关于数据组织的维度,哪个选项的描述是错误的?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 数据组织存在维度,字典类型用于表示一维和二维数据

    B. 高维数据由键值对类型的数据构成,采用对象方式组织

    C. 一维数据采用线性方式组织,对应于数学中的数组和集合等概念

    D. 二维数据采用表格方式组织,对应于数学中的矩阵

    A

    字典用于表示高维数据,一般不用来表示一二维数据。

  2. 以下选项不是Python文件读操作的是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. readtext()

    B. readlines()

    C. readline()

    D. read()

    A

    没有readtext()方法

  3. 对于Python文件,以下描述正确的是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 当文件以文本方式打开时,读取按照字节流方式

    B. 根据不同类型的文件,打开方式只能是文本或者二进制中的一种

    C. 当文件以二进制文件方式打开时,读取按照字符串方式

    D. 同一个文件可以既采用文本方式打开,也可以采用二进制方式打开

    D

    文件就在那里,二进制或文本方式打开只是对其不同的程序理解。

  4. 关于CSV文件的描述,哪个选项的描述是错误的?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. CSV文件的每一行是一维数据,可以使用Python中的列表类型表示

    B. 整个CSV文件是一个二维数据

    C. CSV文件格式是一种通用的、相对简单的文件格式,应用于程序之间转移表格数据

    D. CSV文件通过多种编码表示字符

    D

    一般来说,CSV文件都是文本文件,由相同编码字符组成。

  5. 关于Python文件的‘+’打开模式,哪个选项的描述是正确的?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 追加写模式

    B. 覆盖写模式

    C. 与r/w/a/x一同使用,在原功能基础上增加同时读写功能

    D. 只读模式

    C

    ’+’打开模式的精髓在于它能够同时赋予文件的读写权限。

  6. 给定列表ls = [1, 2, 3, “1”, “2”, “3”],其元素包含2种数据类型,哪个选项是列表ls的数据组织维度?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 高维数据

    B. 二维数据

    C. 多维数据

    D. 一维数据

    D

    列表元素如果都是列表,其可能表示二维数据,例如:[[1,2], [3,4], [5,6]]。

    如果列表元素不都是的将列表,则它表示一维数据。

  7. 关于文件关闭的close()方法,哪个选项的描述是正确的?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 文件处理后可以不用close()方法关闭文件,程序退出时会默认关闭

    B. 如果文件是只读方式打开,仅在这种情况下可以不用close()方法关闭文件

    C. 文件处理遵循严格的“打开-操作-关闭”模式

    D. 文件处理结束之后,一定要用close()方法关闭文件

    A

    打开文件后采用close()关闭文件是一个好习惯。如果不调用close(),当前Python程序完全运行退出时,该文件引用被释放,即程序退出时,相当于调用了close()。

  8. 二维列表ls=[[1,2,3], [4,5,6],[7,8,9]],哪个选项能获取其中元素5?‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. ls[-2][-1]

    B. ls[4]

    C. ls[-1][-1]

    D. ls[1][1]

    D

    这是二维切片的使用方式。

  9. 以下选项对文件描述错误的是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 文件是程序的集合和抽象

    B. 文件可以包含任何内容

    C. 文件是数据的集合和抽象

    D. 文件是存储在辅助存储器上的数据序列

    A

    函数或类是程序的集合和抽象,文件不是。

  10. Python对文件操作采用的统一步骤是:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    A. 打开—操作—关闭

    B. 操作—读取—写入

    C. 打开—读写—写入

    D. 打开—读取—写入—关闭

    A

    打开—操作—关闭 是一个统一步骤,其中,关闭可以省略。

程序设计题

  1. 文本的平均列数

    描述

    打印输出附件文件的平均列数,计算方法如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (1)有效行指包含至少一个字符的行,不计算空行;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (2)每行的列数为其有效字符数;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (3)平均列数为有效行的列数平均值,采用四舍五入方式取整数进位。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    仅给出输出格式示例,非正确答案。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 123
    file=open("latex.log")
    txt=file.readlines()
    cnt1=0
    cnt2=0
    for line in txt:
        line=line.strip("\n")
        if len(line)==0:
            continue
        cnt1+=len(line)
        cnt2+=1
    if cnt2!=0:
        print(round(cnt1/cnt2))
    else:
        print(0)
    ---
    f = open("latex.log")
    s, c = 0, 0
    for line in f:
        line = line.strip("\n")
        if line == "":
            continue
        s += len(line)
        c += 1
    print(round(s/c))
    请注意for line in f获取的line包含每行最后的换行符\n),所以去掉该换行符进行统计
    
  2. **CSV格式清洗与转换 **

    描述

    附件是一个CSV格式文件,提取数据进行如下格式转换:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (1)按行进行倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (2)每行数据倒序排列;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    (3)使用分号(;)代替逗号(,)分割数据,无空格;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    按照上述要求转换后将数据输出。 ‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

    输入输出示例

    以下是一个格式示例,不是最终结果。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬

      输入 输出
    示例 1 (以下内容在文件中) 1,2,3 4,5,6 7,8,9 9;8;7 6;5;4 3;2;1
    file=open("data.csv")
    txt=file.readlines()
    ls=[]
    for line in txt:
        line=line.strip("\n")
        line=line.replace(" ","")##
        lt=line.split(",")
        lt=lt[::-1]
        ls.append(lt)
    ls.reverse()
    for lt in ls:
        print(";".join(lt))
    ---
    f = open("data.csv")
    ls = f.readlines()
    ls = ls[::-1]
    lt = []
    for item in ls:
        item = item.strip("\n")
        item = item.replace(" ", "")
        lt = item.split(",")
        lt = lt[::-1]
        print(";".join(lt))
    f.close()
    注意使用strip()方法去掉每行最后的回车使用replace()去掉每行元素两侧的空格