免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 13577 | 回复: 13

[文本处理] 如何计算时间差 [复制链接]

论坛徽章:
0
发表于 2020-06-24 06:17 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2020-06-24 13:04 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2020-06-24 17:13 |显示全部楼层
  1. #!/usr/bin/python3

  2. import datetime


  3. # 读取文本
  4. def readText(path):
  5.     with open(path, 'r') as f:
  6.         for line in f:
  7.             date1 = '{} {}'.format(line.split()[0], line.split()[1])
  8.             date2 = '{} {}'.format(line.split()[2], line.split()[3])
  9.             output = '{}  {}'.format(line.strip(), handleTime(date1, date2))
  10.             print(output)


  11. # 时间处理
  12. def handleTime(date1, date2):
  13.     d1 = datetime.datetime.strptime(date1, '%m/%d/%Y %H:%M:%S')
  14.     d2 = datetime.datetime.strptime(date2, '%m/%d/%Y %H:%M:%S')
  15.     result = (d2 - d1).seconds
  16.     return convertTime(result)


  17. # 时间转换
  18. def convertTime(result):
  19.     if result >= 60:
  20.         minute, seconds = divmod(result, 60)
  21.         if minute >= 60:
  22.             hour, minute = divmod(minute, 60)
  23.             return convertOutput(hour, minute, 'hour')
  24.         else:
  25.             return convertOutput(minute, seconds, 'minute')
  26.     else:
  27.         return '--- {} seconds'.format(result)


  28. # 后缀时间差输出
  29. def convertOutput(arg1, arg2, type):
  30.     if type == 'hour':
  31.         if arg1 == 1 and arg2 == 0:
  32.             return '--- {} hr'.format(arg1)
  33.         elif arg1 > 1 and arg2 != 0:
  34.             return '--- {} hrs {} minutes'.format(arg1, arg2)
  35.         elif arg1 > 1 and arg2 == 0:
  36.             return '--- {} hrs'.format(arg1)
  37.     elif type == 'minute':
  38.         if arg1 >= 1:
  39.             return '--- {} minutes'.format(arg1)


  40. def main():
  41.     # 文本路径
  42.     path = '/mnt/test/file'
  43.     readText(path)


  44. if __name__ == '__main__':
  45.     main()
复制代码

论坛徽章:
0
发表于 2020-06-24 17:15 |显示全部楼层
本帖最后由 jzsjm1002 于 2020-06-24 18:15 编辑
  1. #!/usr/bin/python3

  2. import datetime


  3. # 读取文本
  4. def readText(path):
  5.     with open(path, 'r') as f:
  6.         for line in f:
  7.             date1 = '{} {}'.format(line.split()[0], line.split()[1])
  8.             date2 = '{} {}'.format(line.split()[2], line.split()[3])
  9.             output = '{}  {}'.format(line.strip(), handleTime(date1, date2))
  10.             print(output)


  11. # 时间处理
  12. def handleTime(date1, date2):
  13.     d1 = datetime.datetime.strptime(date1, '%m/%d/%Y %H:%M:%S')
  14.     d2 = datetime.datetime.strptime(date2, '%m/%d/%Y %H:%M:%S')
  15.     result = (d2 - d1).seconds
  16.     return convertTime(result)


  17. # 时间转换
  18. def convertTime(result):
  19.     if result >= 60:
  20.         minute, seconds = divmod(result, 60)
  21.         if minute >= 60:
  22.             hour, minute = divmod(minute, 60)
  23.             return convertOutput(hour, minute, 'hour')
  24.         else:
  25.             return convertOutput(minute, seconds, 'minute')
  26.     else:
  27.         return '--- {} seconds'.format(result)


  28. # 后缀时间差输出
  29. def convertOutput(arg1, arg2, type):
  30.     if type == 'hour':
  31.         if arg1 == 1 and arg2 == 0:
  32.             return '--- {} hr'.format(arg1)
  33.         elif arg1 > 1 and arg2 != 0:
  34.             return '--- {} hrs {} minutes'.format(arg1, arg2)
  35.         elif arg1 > 1 and arg2 == 0:
  36.             return '--- {} hrs'.format(arg1)
  37.     elif type == 'minute':
  38.         if arg1 >= 1:
  39.             return '--- {} minutes'.format(arg1)


  40. def main():
  41.     # 文本路径
  42.     path = '/mnt/test/file'
  43.     readText(path)


  44. if __name__ == '__main__':
  45.     main()
复制代码

论坛徽章:
0
发表于 2020-06-24 20:51 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
发表于 2020-06-25 20:44 |显示全部楼层
回复 1# KEN6503

  1. [/size][/font][/backcolor][/color][/align]cat a.txt
  2. 06/21/2020 21:42:24  06/21/2020 21:45:24
  3. 06/21/2020 22:42:25  06/22/2020 01:28:41
  4. 06/21/2020 21:42:25  06/21/2020 22:42:32
  5. 06/21/2020 23:42:25  06/22/2020 02:42:29
复制代码

  1. [/size][/font][/backcolor][/color][/align]awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);$13="---";if(hours>0){$14=hours (hours>1?" hrs ":" hr ")};if(minutes>0){$14=$14 (minutes (minutes>1?" minutes":" minute"))};print}' a.txt
复制代码

06 21 2020 21 42 24 06 21 2020 21 45 24 --- 3 minutes
06 21 2020 22 42 25 06 22 2020 01 28 41 --- 2 hrs 46 minutes
06 21 2020 21 42 25 06 21 2020 22 42 32 --- 1 hr
06 21 2020 23 42 25 06 22 2020 02 42 29 --- 3 hrs

论坛徽章:
0
发表于 2020-06-25 20:45 |显示全部楼层
[Vic@DESKTOP-5UNFVRS test]$cat a.txt
06/21/2020 21:42:24  06/21/2020 21:45:24
06/21/2020 22:42:25  06/22/2020 01:28:41
06/21/2020 21:42:25  06/21/2020 22:42:32
06/21/2020 23:42:25  06/22/2020 02:42:29
[Vic@DESKTOP-5UNFVRS test]$awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);$13="---";if(hours>0){$14=hours (hours>1?" hrs ":" hr ")};if(minutes>0){$14=$14 (minutes (minutes>1?" minutes":" minute"))};print}' a.txt
06 21 2020 21 42 24 06 21 2020 21 45 24 --- 3 minutes
06 21 2020 22 42 25 06 22 2020 01 28 41 --- 2 hrs 46 minutes
06 21 2020 21 42 25 06 21 2020 22 42 32 --- 1 hr
06 21 2020 23 42 25 06 22 2020 02 42 29 --- 3 hrs

论坛徽章:
0
发表于 2020-06-25 20:51 |显示全部楼层
本帖最后由 Looiml 于 2020-07-03 16:26 编辑

论坛显示回复失败,重复提交铸造此楼层。

论坛徽章:
0
发表于 2020-06-26 10:30 |显示全部楼层
本帖最后由 Looiml 于 2020-07-03 16:25 编辑

论坛显示回复失败,重复提交铸造此楼层。

论坛徽章:
0
发表于 2020-06-26 10:32 |显示全部楼层
回复 1# KEN6503

cat a.txt
06/21/2020 21:42:24  06/21/2020 21:45:24
06/21/2020 22:42:25  06/22/2020 01:28:41
06/21/2020 21:42:25  06/21/2020 22:42:32
06/21/2020 23:42:25  06/22/2020 02:42:29
  1. awk -F'[:/ ]+' '{t1=mktime(sprintf("%s %s %s %s %s %s",$3,$1,$2,$4,$5,$6));t2=mktime(sprintf("%s %s %s %s %s %s",$9,$7,$8,$10,$11,$12));diff=t2-t1;hours=int(diff/3600);minutes=int(diff%3600/60);out="--- ";if(hours>0){out=out hours (hours>1?" hrs ":" hr ")};if(minutes>0){out=out (minutes (minutes>1?" minutes":" minute"))};print $0,out}' a.txt
复制代码

06/21/2020 21:42:24  06/21/2020 21:45:24 --- 3 minutes
06/21/2020 22:42:25  06/22/2020 01:28:41 --- 2 hrs 46 minutes
06/21/2020 21:42:25  06/21/2020 22:42:32 --- 1 hr
06/21/2020 23:42:25  06/22/2020 02:42:29 --- 3 hrs
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP