派森 #P132. 天气数据筛选

描述

文件weather.in(csv格式,utf-8编码)存放了一段时间的天气数据,请筛选出其中天气为阴,且最低温大于等于1℃的数据,将其csv格式,utf-8编码存储至weather.out文件。 注意:测试用例中数据条数和样例可能不同。

格式

输入,weather.in文件

日期,天气状况,最高温,最低温,风力风向
2011年1月1日,小雨,6℃, 1℃,北风 ≤3级
2011年1月2日,阵雨,5℃, 1℃,北风 ≤3级
2011年1月3日,阴,5℃, 0℃,旋转风 微风
2011年1月4日,阴,5℃, 1℃,旋转风 微风
2011年1月5日,阴,4℃, 1℃,北风 ≤3级
2011年1月6日,阴,6℃, 2℃,无持续风向 ≤3级
2011年1月7日,阴,7℃, 0℃,北风 ≤3级
2011年1月8日,多云,7℃, 1℃,无持续风向 ≤3级
2011年1月9日,阴,6℃, 1℃,北风 ≤3级
2011年1月10日,阴,5℃, 2℃,东北风 ≤3级
2011年1月11日,多云,7℃, 1℃,无持续风向 ≤3级
2011年1月12日,多云,7℃, 1℃,无持续风向 ≤3级
2011年1月13日,多云,7℃, 0℃,无持续风向 ≤3级
2011年1月14日,多云,7℃, 2℃,无持续风向 ≤3级
2011年1月15日,多云,4℃, 0℃,旋转风 微风
2011年1月16日,小雨,5℃, 1℃,无持续风向 ≤3级
2011年1月17日,雨夹雪,3℃, 0℃,北风 ≤3级
2011年1月18日,阴,3℃, 0℃,北风 ≤3级
2011年1月19日,阴,3℃, 0℃,东北风 ≤3级
2011年1月20日,阴,5℃, 0℃,无持续风向 ≤3级
2011年1月21日,多云,6℃, 0℃,无持续风向 ≤3级
2011年1月22日,阴,6℃, 2℃,北风 ≤3级
2011年1月23日,阴,5℃, 0℃,无持续风向 ≤3级
2011年1月24日,多云,7℃, 1℃,北风 ≤3级
2011年1月25日,阵雨,6℃, 1℃,无持续风向 ≤3级
2011年1月26日,小雨,5℃, 2℃,北风 ≤3级
2011年1月27日,雨夹雪,4℃, 1℃,北风 微风
2011年1月28日,多云,6℃, 0℃,东北风 微风
2011年1月29日,阴,7℃, 2℃,无持续风向 ≤3级
2011年1月30日,阴,7℃, 2℃,无持续风向 ≤3级
2011年1月31日,阴,7℃, 2℃,旋转风 微风

输出,weather.out文件

日期,天气状况,最高温,最低温,风力风向
2011年1月4日,阴,5℃, 1℃,旋转风 微风
2011年1月5日,阴,4℃, 1℃,北风 ≤3级
2011年1月6日,阴,6℃, 2℃,无持续风向 ≤3级
2011年1月9日,阴,6℃, 1℃,北风 ≤3级
2011年1月10日,阴,5℃, 2℃,东北风 ≤3级
2011年1月22日,阴,6℃, 2℃,北风 ≤3级
2011年1月29日,阴,7℃, 2℃,无持续风向 ≤3级
2011年1月30日,阴,7℃, 2℃,无持续风向 ≤3级
2011年1月31日,阴,7℃, 2℃,旋转风 微风

代码:

import csv
with open('weather.in', encoding='utf-8', newline='') as fr:
    reader = csv.reader(fr)
    with open('weather.out', 'w', encoding='utf-8', newline='') as fw:
        fw.write("日期,天气状况,最高温,最低温,风力风向\n")
        writer = csv.writer(fw)
        for row in reader:
            if row[1] == '阴' and int(row[3].replace('℃', '').strip()) >= 1:
                writer.writerow(row)

代码解析:

  1. import csv:导入CSV模块,用于读写CSV文件。
  2. with open('weather.in', encoding='utf-8', newline='') as fr::使用with语句打开名为'weather.in'的文件,以只读模式读取(默认模式为文本模式),并指定编码为UTF-8(encoding='utf-8')。newline=''参数用于指定换行符处理方式,为空表示不进行额外的换行符处理。将文件对象赋值给变量frwith语句能够自动关闭文件。
  3. reader = csv.reader(fr):创建一个CSV读取器对象reader,使用文件对象fr作为输入,用于按行读取CSV文件中的数据。
  4. with open('weather.out', 'w', encoding='utf-8', newline='') as fw::使用with语句打开名为'weather.out'的文件,以写入模式写入(默认模式为文本模式),并指定编码为UTF-8(encoding='utf-8')。newline=''参数用于指定换行符处理方式,为空表示不进行额外的换行符处理。将文件对象赋值给变量fwwith语句能够自动关闭文件。
  5. fw.write("日期,天气状况,最高温,最低温,风力风向\n"):向文件fw写入一行文本,内容为"日期,天气状况,最高温,最低温,风力风向",表示输出文件的表头。
  6. writer = csv.writer(fw):创建一个CSV写入器对象writer,使用文件对象fw作为输出,用于按行写入数据到CSV文件中。
  7. for row in reader::遍历CSV读取器对象reader读取的每一行数据,每次将一行赋值给变量row
  8. if row[1] == '阴' and int(row[3].replace('℃', '').strip()) >= 1::判断如果该行数据中第二个元素(天气状况)等于'阴'并且第四个元素(最低温度)经过去除'℃'并去除首尾空格后转换为整数后大于等于1,则执行下一行代码。
  9. writer.writerow(row):使用CSV写入器对象writer将满足条件的数据行row写入CSV文件。

猜你喜欢

转载自blog.csdn.net/m0_63501513/article/details/132438509
今日推荐