实验室寒假任务处理及注释

处理一:将数据中所有信息有问题的那行信息删除。如样例中第4行数据,这一行数据只有3个元素,而其他行都有6个元素,所以删除第4行即可。再如最后一行第3个信息明显有问题,所以该行也是问题行,删除即可。将全部数据处理完之后,每行单个元素以逗号为分隔,写入文件test1。
输入数据样例

18 Jogging 102271561469000 -13.53 16.89 -6.4
18 Jogging 102271641608000 -5.75 16.89 -0.46
18 Jogging 102271681617000 -2.18 16.32 11.07
18 Jogging 3.36
18 Downstairs 103260201636000 -4.44 7.06 1.95
18 Downstairs 103260241614000 -3.87 7.55 3.3
18 Downstairs 103260321693000 -4.06 8.08 4.79
18 Downstairs 103260365577000 -6.32 8.66 4.94
18 Downstairs 103260403083000 -5.37 11.22 3.06
18 Downstairs 103260443305000 -5.79 9.92 2.53
6 Walking 0 0 0 3.214402

输出test1样例

18,Jogging,102271561469000,-13.53,16.89,-6.4
18,Jogging,102271641608000,-5.75,16.89,-0.46
18,Jogging,102271681617000,-2.18,16.32,11.07
18,Downstairs,103260201636000,-4.44,7.06,1.95
18,Downstairs,103260241614000,-3.87,7.55,3.3
18,Downstairs,103260321693000,-4.06,8.08,4.79
18,Downstairs,103260365577000,-6.32,8.66,4.94
18,Downstairs,103260403083000,-5.37,11.22,3.06
18,Downstairs,103260443305000,-5.79,9.92,2.53

我的代码

#!/usr/bin/env python3          #注释行,使脚本在不同的操作系统之间具有可移植性

import csv               #导入python中的csv模块
import sys               #导入python中的sys模块

input_file = sys.argv[1]        #使用sys模块中的argv参数,传递给命令行的参数,也就是在命令行输入的内容
output_file = sys.argv[2]       #同上

with open(input_file, 'r', newline='') as csv_in_file:
#将“input_file”打开为一个文件对象“csv_in_file”,“r”表示只读模式,说明打开“input_file”是为了读取数据
    with open(output_file, 'w', newline='') as csv_out_file:
    # 将“output_file”打开为一个文件对象“csv_out_file”,“w”表示可写模式,说明打开“input_file”是为了写入数据
    # 注:with可以在语句结束时关闭文件对象
        filereader = csv.reader(csv_in_file, delimiter=' ')
        #使用csv模块中的reader函数创建一个名为“filereader”的文件读取对象,来读取输入文件里的行
        filewriter = csv.writer(csv_out_file)
        #使用csv模块中的writer函数创建一个名为“filereader”的文件写入对象,来将数据写入输出文件
        for row_list in filereader:          #创建一个for循环,在输入文件剩余各行里进行迭代
            if len(row_list) == 6 and row_list[2] != '0':
            #因为正确的是每行都要有六个元素,而且第三列的数字要不等于0才是要求的模式,所以调用if语句进行判断
                filewriter.writerow(row_list)              #满足条件的则被写入输出文件

处理二:将test1数据中所有动作的数目统计出来,将动作数目打印到屏幕。然后将动作数目变为100的倍数,多余的删除,将数据行写入输出文件test2。比如统计出Jogging的数量为3021次,那么打印出3021后只往输出文件test2中写入3000条。
我的代码

#!/usr/bin/env python3                           #注释行,使脚本在不同的操作系统之间具有可移植性

import csv                           #导入python中的csv模块
import sys                           #导入python中的sys模块

input_file = sys.argv[1]            #使用sys模块中的argv参数,传递给命令行的参数,也就是在命令行输入的内容
output_file = sys.argv[2]           #同上

movementsDict = {}                  #创建一个名为"movementsDict"的空字典
inputData = []                      #创建一个名为"inputData"的空列表
with open(input_file, 'r', newline='') as csv_in_file:
# 将“input_file”打开为一个文件对象“csv_in_file”,“r”表示只读模式,说明打开“input_file”是为了读取数据
    filereader = csv.reader(csv_in_file)
    #使用csv模块中的reader函数创建一个名为“filereader”的文件读取对象,来读取输入文件里的行
    movementsList = []                  #创建一个名为"movementsList"的空列表
    for row_list in filereader:         #创建一个for循环,在输入文件剩余各行里进行迭代
        movementsList.append(row_list[1])               #应用列表里的qppend函数给列表里增加元素,我们所要增加的都是列表里各行索引为1的各个元素
    for movement in movementsList:
        if movement not in movementsDict:
            movementsDict[movement] = 1
        else:
            movementsDict[movement] += 1                    #通过字典对其中的元素来计数
    for movement, movementsDict[movement] in movementsDict.items():
        print('Movement: %-15s' % movement, end='')
        print('Amount: ' + str(movementsDict[movement]))
        movementsDict[movement] = movementsDict[movement] // 100 * 100
        #为了以100为精确度,我们进行movementsDict[movement] = movementsDict[movement] // 100 * 100的运算,将多余的删去
        inputData.append(movementsDict[movement])
        #将满足条件的写入字典中
    csv_in_file.seek(0, 0)
    with open(output_file, 'w', newline='') as csv_out_file:
    # 将“output_file”打开为一个文件对象“csv_out_file”,“w”表示可写模式,说明打开“input_file”是为了写入数据
        filewriter = csv.writer(csv_out_file)
        # 使用csv模块中的writer函数创建一个名为“filereader”的文件写入对象,来将数据写入输出文件
        countWalking = 0
        countJogging = 0
        countUpstairs = 0
        countDownstairs = 0
        countStanding = 0
        countSitting = 0
        #将每个元素的初始值都记为0,以便后面统计其个数
        for row_list in filereader:
        # 创建一个for循环,在输入文件剩余各行里进行迭代
            if row_list[1] == 'Walking':
                if countWalking < inputData[0]:
                    filewriter.writerow(row_list)
                    countWalking += 1
            #就拿这个Walking来举例,如果索引为1的元素是Walking,如果Walking的个数少于inputData[0]中统计的个数就写入输出文件中,个数加一,下面的都一样
            elif row_list[1] == 'Jogging':
                if countJogging < inputData[1]:
                    filewriter.writerow(row_list)
                    countJogging += 1
            elif row_list[1] == 'Upstairs':
                if countUpstairs < inputData[2]:
                    filewriter.writerow(row_list)
                    countUpstairs += 1
            elif row_list[1] == 'Downstairs':
                if countDownstairs < inputData[3]:
                    filewriter.writerow(row_list)
                    countDownstairs += 1
            elif row_list[1] == 'Standing':
                if countStanding < inputData[4]:
                    filewriter.writerow(row_list)
                    countStanding += 1
            else:
                if countSitting < inputData[5]:
                    filewriter.writerow(row_list)
                    countSitting += 1


处理三:将test2中的数据读出,每行只取最后3列,每行数据中的单个元素以空格隔开,写入文件test3。
我的代码

import sys                       #导入python中的sys模块
import csv                       #导入python中的csv模块

input_file=sys.argv[1]              #使用sys模块中的argv参数,传递给命令行的参数,也就是在命令行输入的内容
output_file=sys.argv[2]           #同上


with open(input_file,'r',newline='') as csv_in_file:
# 将“input_file”打开为一个文件对象“csv_in_file”,“r”表示只读模式,说明打开“input_file”是为了读取数据
    with open(output_file,'w',newline='') as csv_out_file:
    # 将“output_file”打开为一个文件对象“csv_out_file”,“w”表示可写模式,说明打开“input_file”是为了写入数据
        filereader=csv.reader(csv_in_file)
        # 使用csv模块中的reader函数创建一个名为“filereader”的文件读取对象,来读取输入文件里的行
        filewriter=csv.writer(csv_out_file)
        # 使用csv模块中的writer函数创建一个名为“filereader”的文件写入对象,来将数据写入输出文件
        for row in filereader:               #创建一个for循环,在输入文件剩余各行里进行迭代
            ass=[]                           #创建一个名为"ass"的空列表,用来增加元素
            ass.append(row[3])
            ass.append(row[4])
            ass.append(row[5])
            #因为要求加入后三列的元素,则加入下标为3,4,5列的个元素
            filewriter.writerow(row)            #满足条件的写入输出文件

处理四:将test3中的数据读出,每行数据的单个元素用空格隔开,数据行与数据行用逗号隔开,每20个一行写入文件finally中,保证每行不会出现不够或者多出来的情况。
输出finally单行样例
我的代码

import csv               #导入python中的csv模块
import sys               #导入python中的sys模块

input_file = sys.argv[1]        #使用sys模块中的argv参数,传递给命令行的参数,也就是在命令行输入的内容
output_file = sys.argv[2]       #同上

i=0
row_list = []                  #创建一个名为"row_list"的空列表,来保存所有的数据行

with open(input_file,'r',newline='') as csv_in_file:
# 将“input_file”打开为一个文件对象“csv_in_file”,“r”表示只读模式,说明打开“input_file”是为了读取数据
    with open(output_file,'w',newline='') as csv_out_file:
    # 将“output_file”打开为一个文件对象“csv_out_file”,“w”表示可写模式,说明打开“input_file”是为了写入数据
        filereader = csv.reader(csv_in_file,delimiter=" ")
        # 使用csv模块中的reader函数创建一个名为“filereader”的文件读取对象,来读取输入文件里的行
        filewriter = csv.writer(csv_out_file,delimiter=" ")
        # 将“output_file”打开为一个文件对象“csv_out_file”,“w”表示可写模式,说明打开“input_file”是为了写入数据
        for row in filereader:
        # 创建一个for循环,在输入文件剩余各行里进行迭代
            i=i+1
            row_list.append(row)
            if i==20:
                filewriter.writerow(row_list)
                i=0
                row_list = []
            #遍历列表,当a等于20时,然后把数据添加到列表中。列表长度为20,这时就需要把元素添加到输出列表中,然后将i归零,将列表清空,继续下一轮拆分。
            # 拆分完成之后,逐行写入输出文件即可。

这周有时间,把寒假的任务做了批注,方便后面复习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值