鱼C论坛

 找回密码
 立即注册
楼主: AisakaTaiga

[已解决]向大佬求助,想编个程序算日降水量

[复制链接]
发表于 2020-5-25 11:50:08 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 11:46
受教了,大佬我这个程序跑出来只有24个值,循环那里应该怎么改呢

前面初始化一个记录行数的参数:
count_num = 0
然后在这代码
if plot == 'M1151':
下面加个
count_num += 1
把第二个 for 改成 :
for i in range(count_num):
这样试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 11:56:20 | 显示全部楼层
Twilight6 发表于 2020-5-25 11:50
前面初始化一个记录行数的参数:

然后在这代码

对了 订正下 你 第二个for 改成
for i in range(count_num-1):
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 12:07:45 | 显示全部楼层
刚刚没去试着跑下,我去跑了下发现看不懂写入的文件是啥,你能说说你要怎么整理写入新txt文件  我在帮你改改看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 12:31:17 | 显示全部楼层
Twilight6 发表于 2020-5-25 12:07
刚刚没去试着跑下,我去跑了下发现看不懂写入的文件是啥,你能说说你要怎么整理写入新txt文件  我在帮你改 ...

嗯嗯,想写成一个类似原文件类型的txt,只是把小时那一列不要变成日降水,类似这种:
区站号       年份       月份        日期       降水(mm)
M1151        2010          1               1           0.0
M1151        2010          1                2           1.0
M1151        2010          1                3           1.3

但是我编的时候不知道怎么输出成这样的,程序里面就只输出了日降水量,就是最后一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 12:53:17 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 12:31
嗯嗯,想写成一个类似原文件类型的txt,只是把小时那一列不要变成日降水,类似这种:
区站号       年份 ...

是怎么计算降水的?还有 定时自记降水(mm)也不要了是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 13:30:36 | 显示全部楼层
Twilight6 发表于 2020-5-25 12:53
是怎么计算降水的?还有 定时自记降水(mm)也不要了是吗?

定时自记降水就是小时的降水,计算降水就是把一天24h的加起来~
InkedQQ图片20200525110839_LI.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 13:31:19 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 13:30
定时自记降水就是小时的降水,计算降水就是把一天24h的加起来~

原来如此 骚等、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 13:54:25 | 显示全部楼层

要的~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 13:54:51 | 显示全部楼层

四川的噻?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 14:25:10 | 显示全部楼层    本楼为最佳答案   
试试看效果是不是你想要的那种
f = open('逐小时降水.txt',encoding='utf-8')
data = []
number = 0

for each_line in f:
    temp = []
    if each_line[:3] != "区站号":
        (plot, year, mouth, day, time, num) = [i for i in each_line.split(' ') if i!='']
        if plot == 'M1151':
            temp.append(year)
            temp.append(mouth)
            temp.append(day)
            temp.append(time)
            if num == '/' or num == '/\n':
                num = 0.0
            temp.append(float(num))
            data.append(tuple(temp))
# print(data)
new_data = []
for i in range(len(data)-1):
    if data[i][0] == data[i+1][0] and data[i][1] == data[i+1][1] and  data[i][2] == data[i+1][2]:
        number += data[i][4]
        continue
    number += (data[i][4] + data[i+1][4])
    new_data.append((data[i][0:3] + tuple((str(number),'')))[:-1])
    number = 0


file_name = '日降水量' + '.txt'
tp_file = open(file_name, 'w',encoding='utf-8')
tp_file.write('{:^6}{:^6}{:^6}{:^10}\n'.format('年份','月份','日期','日降水量(mm)'))
for i in range(len(new_data)):
    tp_file.write('{:^8}{:^8}{:^8}{:^10.2f}\n'.format(new_data[i][0],new_data[i][1],new_data[i][2],float(new_data[i][3])))

tp_file.close()
f.close()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 15:56:17 | 显示全部楼层
Twilight6 发表于 2020-5-25 14:25
试试看效果是不是你想要的那种

运行了一下,报错了下面的语句,是什么原因呀  
for each_line in f:
  File "E:\python\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 0: invalid continuation byte
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 15:57:36 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 15:56
运行了一下,报错了下面的语句,是什么原因呀  
for each_line in f:
  File "E:\python\lib ...
tp_file = open(file_name, 'w',encoding='utf-8')
f = open('逐小时降水.txt',encoding='utf-8')
把 encoding='utf-8' 删了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 16:01:34 | 显示全部楼层
Twilight6 发表于 2020-5-25 15:57
把 encoding='utf-8' 删了

删了以后出现了这个问题~

(plot, year, mouth, day, time, num) = [i for i in each_line.split(' ') if i!='']
ValueError: not enough values to unpack (expected 6, got 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 16:03:51 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 16:01
删了以后出现了这个问题~

(plot, year, mouth, day, time, num) =

你的txt 文本 是不是有些地方没按规律...   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 16:04:24 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 16:01
删了以后出现了这个问题~

(plot, year, mouth, day, time, num) =

我用你给我的数据已经可以正常运行了 你可以试试你把你给我的数据拿去试着运行下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 16:05:19 | 显示全部楼层
Twilight6 发表于 2020-5-25 16:03
你的txt 文本 是不是有些地方没按规律...

我检查一下~ 谢谢大佬帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 16:50:54 | 显示全部楼层
Twilight6 发表于 2020-5-25 16:04
我用你给我的数据已经可以正常运行了 你可以试试你把你给我的数据拿去试着运行下

大佬,我用给你的数据运行仍然是这个问题,不知道是因为什么,百度了一下说是什么换行符的问题,可是我把换行符替换了以后就不能运行出我想要的数据了。求解答
问题如下:
(plot, year, mouth, day, time, num) = [i for i in each_line.split(' ') if i!='']
ValueError: not enough values to unpack (expected 6, got 1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 16:55:13 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 16:50
大佬,我用给你的数据运行仍然是这个问题,不知道是因为什么,百度了一下说是什么换行符的问题,可是我把 ...

哦哦 那我知道了 你文本里面是有空行的原因才导致报错,if条件过滤下空行的即可
if each_line[:3] != "区站号" and each_line != "\n":
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-25 17:51:23 | 显示全部楼层
Twilight6 发表于 2020-5-25 16:55
哦哦 那我知道了 你文本里面是有空行的原因才导致报错,if条件过滤下空行的即可

仍然是这个问题,我试了我给你的样本和原始数据都是这个问题
捕获.PNG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-25 17:59:54 | 显示全部楼层
AisakaTaiga 发表于 2020-5-25 17:51
仍然是这个问题,我试了我给你的样本和原始数据都是这个问题


那在if 前面一行加个
each_line.strip() 试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 16:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表