鱼C论坛

 找回密码
 立即注册
查看: 1460|回复: 12

[作品展示] Python处理csv文档,最大值,最小值,求和,计数,等!!!

[复制链接]
发表于 2020-5-18 19:40:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Cool_Breeze 于 2020-5-20 17:21 编辑
  1. #!/usr/bin/env python3
  2. #coding = utf-8
  3. import os
  4. #自己的格式打印类
  5. from printf_ import printf_

  6. file_path = r'C:\Users\user\Desktop\TWII'
  7. os.chdir(file_path)

  8. #没有按二级制读取,\r\n隐式转换为\n
  9. f_csv = open('tes.csv','r')

  10. #读取第一行标题
  11. item = f_csv.readline().split(',')
  12. #换行符为单独一列时,有效列数等于总列数-1
  13. if item[-1] == '\n':
  14.     item_n = len(item) - 1
  15. else:
  16.     #换行符\r\n与最后一列数据在同一个字符串中
  17.     item[-1] = item[-1][0:-1]
  18.     item_n = len(item)   
  19. # print(each_line)

  20. #初始化数据字典列表
  21. data_item=dict(max=-10**20,max_time=None,min=10**20,min_time=None,avg=0,sum=0,count=0)

  22. #创建对应空列表,用于每一列储存数据
  23. item_list = []
  24. for i in range(item_n):
  25.     item_list.append(data_item.copy())
  26. # print(len(item_list))

  27. #行数
  28. line_count=0
  29. #指定跳过数据列数(从左往右)0=1
  30. skip_col = 0

  31. #读余下取所有数据
  32. for each_line in f_csv:
  33.     line_count += 1
  34.     # print(line_count)
  35.     temp = each_line.split(',')
  36.     temp_len = len(temp)
  37.     for i in range(temp_len):
  38.         #最后一列无效数据
  39.         if i <= skip_col or i == item_n: continue
  40.         #转换失败,t_data=0
  41.         try:
  42.             t_data = float(temp[i])
  43.         except ValueError:
  44.             t_data = 0
  45.         # 累加
  46.         item_list[i]['sum'] += t_data
  47.         if t_data > item_list[i]['max']:
  48.             item_list[i]['max'] = t_data
  49.             item_list[i]['max_time'] = temp[0]
  50.         if t_data < item_list[i]['min']:
  51.             item_list[i]['min'] = t_data
  52.             item_list[i]['min_time'] = temp[0]
  53.     #avg赋值
  54.     for i in range(item_n):
  55.         if i <= skip_col or i == item_n: continue
  56.         # i >= temp_len-1说明最后一行数据不完整,影响平均值
  57.         if i > temp_len - 1:
  58.             item_list[i]['avg'] = item_list[i]['sum'] / (line_count - 1)
  59.             item_list[i]['count'] = line_count - 1
  60.         else:
  61.             item_list[i]['avg'] = item_list[i]['sum'] / line_count
  62.             item_list[i]['count'] = line_count
  63. f_csv.close()

  64. pf=printf_()
  65. #根据默认标题名初始化列表宽度
  66. sheet_len=[4,3,8,3,8,3,3,5]
  67. charlen = 0
  68. #自动获取列表宽度
  69. for i in item:
  70.     if len(i) > charlen: charlen = len(i)
  71. sheet_len[0] = charlen
  72. temp_count = 0
  73. for i in item_list:
  74.     if temp_count <= skip_col:
  75.         temp_count+=1
  76.         continue
  77.     for j,v in enumerate(list(i.values())):
  78.         charlen = len(str(v))
  79.         poi = j+1
  80.         if sheet_len[poi] < charlen: sheet_len[poi] = charlen

  81. #获取标题列表
  82. p_item=[i for i in data_item.keys()]
  83. p_item.insert(0,'item')

  84. #打印+---+---+-+
  85. pf.printf_head(*sheet_len)

  86. #将2个列表合为一个列表(name,name长度),为了打印格式
  87. #打印|xxx|xxx|x|
  88. pf.printf_cnter(*list(row[i] for row in zip(p_item,sheet_len) for i in range(2)))
  89. pf.printf_head(*sheet_len)

  90. for i in range(item_n):
  91.     if i <= skip_col or i == item_n: continue
  92.     #将字典值转换为列表
  93.     temp_list=list(item_list[i].values())
  94.     #将项目名添加进去
  95.     temp_list.insert(0,item[i])
  96.     pf.printf_cnter(*list(row[i] for row in zip(temp_list,sheet_len) for i in range(2)))
  97. pf.printf_head(*sheet_len)
复制代码
  1. +------------------------------------+------------+--------------+-----------+--------------+--------------------+--------------------+-------+
  2. | item                               | max        | max_time     | min       | min_time     | avg                | sum                | count |
  3. +------------------------------------+------------+--------------+-----------+--------------+--------------------+--------------------+-------+
  4. |  VDDCR_GFX Current (A) [0] (A)     | 244.95688  | 20:32:05.864 | 2.00784   | 19:29:01.189 | 123.75535857904592 | 4502714.966540007  | 36384 |
  5. |  GPU Temperature (C) [0] (C)       | 84.67364   | 22:06:03.904 | 36.74507  | 19:29:01.189 | 80.63858083608046  | 2933954.1251399517 | 36384 |
  6. |  Junction Temperature (C) [0] (C)  | 99.82796   | 22:06:07.134 | 36.78448  | 19:29:01.189 | 93.10586805381416  | 3387563.9032699745 | 36384 |
  7. |  Mem Temperature (C) [0] (C)       | 98.0       | 22:06:16.874 | 34.0      | 19:29:02.245 | 93.02386349137001  | 3384580.2492700065 | 36384 |
  8. |  VR_GFX (C) [0] (C)                | 85.0       | 22:06:15.774 | 27.0      | 19:29:01.189 | 81.54814546119151  | 2967047.724459992  | 36384 |
  9. |  VR_SOC (C) [0] (C)                | 79.0       | 22:05:59.594 | 29.0      | 19:29:01.189 | 76.69735095179215  | 2790556.4170300053 | 36384 |
  10. |  VR_MEM (C) [0] (C)                | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  11. |  VR_VDDCI (C) [0] (C)              | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  12. |  Liquid0 (C) [0] (C)               | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  13. |  Liquid1 (C) [0] (C)               | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  14. |  PLX (C) [0] (C)                   | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  15. |  Min (C) [0] (C)                   | 79.15897   | 22:06:02.803 | 35.35468  | 19:29:01.189 | 75.73771405205596  | 2755640.988070004  | 36384 |
  16. |  GFXCLK Freq [0] ()                | 2067.62036 | 05:42:38.450 | 804.09778 | 00:42:47.646 | 1917.2023946278628 | 69755491.92614016  | 36384 |
  17. |  PWM [0] ()                        | 60.54811   | 22:06:21.194 | 0.0       | 19:29:01.189 | 48.997079181508425 | 1782709.7289400026 | 36384 |
  18. |  FAN Speed [RPM] [0] ()            | 2452.70947 | 22:06:26.614 | 0.0       | 19:29:01.189 | 2148.191614044644  | 78159803.68540034  | 36384 |
  19. |  Limit PPT0 (W) [0] (W)            | 195.0      | 19:29:01.189 | 195.0     | 19:29:01.189 | 195.0              | 7094880.0          | 36384 |
  20. |  Value PPT0 (W) [0] (W)            | 195.00354  | 02:33:50.597 | 10.208    | 19:29:01.189 | 175.08616300241795 | 6370334.954679974  | 36384 |
  21. |  GFX Activity (%) [0] (%)          | 99.9752    | 00:42:08.825 | 0.07353   | 00:51:53.411 | 85.77492298345469  | 3120834.7978300154 | 36384 |
  22. |  PCIe Link Speed (GT/s) [0] (GT/s) | 8.0        | 19:29:01.189 | 2.5       | 19:29:02.245 | 7.952685246262093  | 289350.5           | 36384 |
  23. |  PCIe Link Width [0] ()            | 16.0       | 19:29:01.189 | 16.0      | 19:29:01.189 | 16.0               | 582144.0           | 36384 |
  24. |  PCIe Correctable Error [0] ()     | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  25. |  PCIe Uncorrectable Error [0] ()   | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  26. |  PCIe Residency Gen 1 (%) [0] (%)  | 51.89874   | 19:29:09.790 | 2.52275   | 19:33:32.379 | 3.1485344538808073 | 114556.27756999929 | 36384 |
  27. |  PCIe Residency Gen 2 (%) [0] (%)  | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  28. |  PCIe Residency Gen 3 (%) [0] (%)  | 97.47725   | 19:33:32.379 | 48.10127  | 19:29:09.790 | 96.85146558542264  | 3523843.7238600175 | 36384 |
  29. |  PCIe Residency Gen 4 (%) [0] (%)  | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  30. |  PCIe Residency L0 (%) [0] (%)     | 100.0      | 19:29:01.189 | 99.9974   | 20:40:54.996 | 99.99928975374357  | 3638374.158400206  | 36384 |
  31. |  PCIe Residency L0s (%) [0] (%)    | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  32. |  PCIe Residency L1 (%) [0] (%)     | 0.0        | 19:29:01.189 | 0.0       | 19:29:01.189 | 0.0                | 0.0                | 36384 |
  33. |  Fan PWM reading [%] [0] (%)       | 60.0       | 19:32:11.820 | 0.0       | 19:29:01.189 | 48.993568601583114 | 1782582.0          | 36384 |
  34. |  mclk[0] (MHz)                     | 32327430.0 | 01:14:48.400 | 101.0     | 19:29:01.189 | 1728.383577494984  | 62883779.7         | 36383 |
  35. |  sclk[0] (MHz)                     | 2084.0     | 22:58:23.259 | 796.0     | 19:56:22.313 | 1914.0741829975539 | 69639761.0         | 36383 |
  36. +------------------------------------+------------+--------------+-----------+--------------+--------------------+--------------------+-------+

  37. 请按任意键继续. . .
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-5-18 19:41:52 | 显示全部楼层
本帖最后由 Cool_Breeze 于 2020-5-18 19:47 编辑

这个帖子是C语言的文件数据分析比较(Rev 02!)

比c简洁多了,只是慢了2秒左右!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 19:45:38 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 20:07:08 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-18 19:45
@_2_ @人造人 @hrp

过后尽量考虑一下 Python 的速度问题,
(小声bb:这是个大问题)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 20:08:20 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-18 19:41
这个帖子是C语言的文件数据分析比较(Rev 02!)

比c简洁多了,只是慢了2秒左右!

你可以尝试 PrettyTable 进行漂亮打印,
总有人比你自己的轮子更好
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 20:14:40 | 显示全部楼层
_2_ 发表于 2020-5-18 20:08
你可以尝试 PrettyTable 进行漂亮打印,
总有人比你自己的轮子更好

恩恩!当时还不知道 PrettyTable,就当练习自己写了一个!
速度的确是大问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 21:31:58 From FishC Mobile | 显示全部楼层
Cool_Breeze 发表于 2020-5-18 20:14
恩恩!当时还不知道 PrettyTable,就当练习自己写了一个!
速度的确是大问题!

…… PyPi 里总有一些不知道用不用的上的轮子
导致一个 Python 程序总会走向两条路线,
一个是啃官方文档总结的用法,一个是自造的轮子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 22:04:53 | 显示全部楼层

我不玩python的,^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-18 22:24:42 | 显示全部楼层
为什么考虑CSV呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 23:01:28 | 显示全部楼层
人造人 发表于 2020-5-18 22:04
我不玩python的,^_^

不好意思
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 23:01:59 | 显示全部楼层

还没有学。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-18 23:05:34 | 显示全部楼层
_2_ 发表于 2020-5-18 20:08
你可以尝试 PrettyTable 进行漂亮打印,
总有人比你自己的轮子更好

还是的多看看库里面的东西。
学思路很重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-19 11:19:47 From FishC Mobile | 显示全部楼层
本帖最后由 hrp 于 2020-5-19 11:33 编辑

膜拜
(小声:为啥@ 我不成功)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-19 20:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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