You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Python字典实现各类线材长度的自动汇总?

自动统计所有线材类型总长度的Python实现

问题背景

我是Python编程新手,正在开发一个统计线材列表中各类线材总长度的程序。目前已实现用户指定线材类型的长度汇总功能,现在需要编写代码自动统计文件中所有线材类型的总长度。

现有指定线材统计代码

wtype = []
w = []
w1 = []

# 打开TXT文件
fhand = input('\nEnter Text File\n')

try:
    if len(fhand) <= 0:
        fhand = 'test.txt'
    fh = open(fhand)
except:
    print('\nNo File Found:', fhand, '\n')
    exit()

# 输出所有可能的线材类型
for line in fh:
    line = line.rstrip()
    wtype.append(line)  # 后续代码需要用到
    line2 = line.split(',')[2]
    if line2 not in w:
        w.append(line2)
    else:
        continue
d1 = dict(enumerate(w))
print(d1)

# 汇总用户选择的线材类型总长度
wire = int(input('\nEnter the number that is before the wire type you need:\n'))

for key, val in d1.items():
    if key == wire:
        for x in wtype:
            x = x.split(',')
            if x[2] == val:
                w1.append(x[1])
            else:
                continue
        s = [eval(i) for i in w1]
        print('\nYour will need ', sum(s)/12, ' Feet of ', val, '.\n')

test.txt文件说明

文件中长度单位为英寸,代码通过sum(s)/12转换为英尺,列依次为WIRE、LENGTH、TYPE、QTY,示例数据如下:

WIRE-006A22,72,M22759/16-22-9,1
WIRE-005A22,60,M22759/16-22-9,1
WIRE-004A22,72,M22759/16-22-9,1
WIRE-003A22,72,M22759/16-20-9,1
WIRE-002A22,60,M22759/16-20-9,1
WIRE-001A22,72,M22759/16-22-9,1
WIRE-009A22,72,M22759/16-22-9,1
WIRE-008A22,60,M22759/16-22-9,1
WIRE-007A22,72,M22759/16-20-9,1
WIRE-011A22,72,M22759/16-22-9,1
WIRE-012A22,72,M22759/16-22-9,1
WIRE-014A22,72,M22759/16-20-9,1
WIRE-013A22,60,M22759/16-22-9,1
WIRE-021A22,72,M22759/16-20-9,1
WIRE-031A22,72,M22759/16-22-9,1
WIRE-032A22,72,M22759/16-20-9,1
WIRE-043A22,60,M22759/16-22-9,1
WIRE-054A22,72,M22759/16-20-9,1
WIRE-065A22,72,M22759/16-22-9,1
WIRE-076A22,60,M22759/16-22-9,1
WIRE-087A22,72,M22759/16-22-9,1
WIRE-098A22,72,M22759/16-20-9,1
WIRE-089A22,72,M22759/16-20-9,1
WIRE-078A22,72,M22759/16-20-9,1
WIRE-067A22,60,M22759/16-22-9,1
WIRE-056A22,72,M22759/16-22-9,1
WIRE-045A22,72,M22759/16-20-9,1
WIRE-034A22,60,M22759/16-22-9,1
WIRE-023A22,60,M22759/16-22-9,1
WIRE-012A22,72,M22759/16-20-9,1

期望输出格式

自动统计所有线材类型的总长度(单位:英尺),输出格式如下:

output: {'M22759/16-22-9': 100, 'M22759/16-20-9': 71}

改进后的自动统计代码

# 初始化统计字典,键为线材类型,值为总长度(英寸)
wire_lengths = {}

# 处理文件输入
fhand = input('\nEnter Text File\n')
try:
    if len(fhand) <= 0:
        fhand = 'test.txt'
    with open(fhand, 'r') as fh:
        for line in fh:
            line = line.strip()
            if not line:
                continue  # 跳过空行
            # 拆分字段,获取长度和类型
            parts = line.split(',')
            if len(parts) < 3:
                continue  # 跳过格式错误的行
            length = int(parts[1])
            wire_type = parts[2]
            # 累加长度
            if wire_type in wire_lengths:
                wire_lengths[wire_type] += length
            else:
                wire_lengths[wire_type] = length
except FileNotFoundError:
    print(f'\nNo File Found: {fhand}\n')
    exit()

# 转换为英尺并格式化输出(保留整数或按需调整精度)
result = {k: round(v / 12) for k, v in wire_lengths.items()}
print(f'output: {result}')

代码说明

  1. 统计字典初始化:用wire_lengths字典直接存储每个线材类型的总长度,无需先收集所有类型再二次遍历,更高效。
  2. 文件读取优化:使用with语句自动管理文件资源,避免手动关闭文件的疏漏。
  3. 数据处理:遍历每行数据时直接拆分字段,将长度转换为整数后累加至对应类型的字典值中,同时跳过空行和格式错误的行。
  4. 单位转换:最后将总英寸数除以12转换为英尺,用round()取整,和示例输出格式一致。

内容的提问来源于stack exchange,提问作者wortzinator

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 17:35:23