首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中连续读取文件数据

在python中连续读取文件数据
EN

Stack Overflow用户
提问于 2022-09-27 14:24:00
回答 2查看 39关注 0票数 0

我有一个文件并包含一些数据

代码语言:javascript
复制
 Net Name:  VDD
 Pin Name:  VDD
 Instance Name:  ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen

 Layer/Via#  PGResistor  Resistance(cumulative) Ohm  Voltage_Drop(cumulative) V  Length 
 VSRC       N 0.0000e+00 0.0000e+00 3.7865e-03 3.7865e-03  0  144.43150,550.00000   
 AP         N 1.0000e-06 1.0000e-06 0.0000e+00 3.7865e-03  0.000100000001  144.43150,550
 AP         N 3.1474e-03 3.1484e-03 5.6028e-06 3.7921e-03  6.8432998  144.43200,550.0000
 AP         N 1.0000e-06 3.1494e-03 0.0000e+00 3.7921e-03  0.000200000003  144.43200,543
 AP         N 1.9433e-03 5.0927e-03 1.1802e-05 3.8039e-03  4.1663999  144.43200,543.1565
 AP         N 2.5653e-03 7.6580e-03 1.7583e-05 3.8215e-03  5.5001001  144.43200,538.9900
 AP         N 1.0137e-02 1.7795e-02 7.0572e-05 3.8921e-03  8.851  144.43200,533.49000   
 AP         N 2.1164e-02 3.8959e-02 1.5050e-04 4.0426e-03  16.0295  144.43200,524.63900 
 AP         N 9.9838e-07 3.8960e-02 0.0000e+00 4.0426e-03  0.054  128.40250,524.63900   
 RV         N 3.3405e-02 7.2365e-02 2.3925e-04 4.2818e-03  2.7  128.40250,524.69300   
 M15        N 9.9838e-07 7.2366e-02 0.0000e+00 4.2818e-03  0.6985  128.40250,524.69300  
 M15        N 1.0580e-01 1.7817e-01 4.3488e-04 4.7167e-03  14.947  127.70400,524.69300  
 VIA14      N 8.8155e-03 1.8698e-01 5.1737e-05 4.7684e-03  0.324  127.70400,539.64000   
 M14        N 3.5033e-02 2.2201e-01 1.1855e-04 4.8870e-03  4.96  127.70400,539.64000   
 M14        N 1.6951e-01 3.9153e-01 1.3857e-03 6.2727e-03  24  132.66400,539.64000   
 M9         N 9.5367e-07 6.2670e+00 0.0000e+00 7.4605e-03  0.26  187.49200,516.86300 
      
 Layer/Via  Resistance(Ohm)  Voltage_Drop(V)  R_Cumulative(Ohm)  Vdrop_Cummulative(V) 
 VSRC        0.0000e+00  3.7865e-03  0.0000e+00  3.7865e-03 
 AP          3.8960e-02  2.5606e-04  3.8960e-02  4.0426e-03 
 RV          3.3405e-02  2.3925e-04  7.2365e-02  4.2818e-03 
 M15         1.0580e-01  4.3488e-04  1.7817e-01  4.7167e-03 
 VIA14       8.8155e-03  5.1737e-05  1.8698e-01  4.7684e-03 
 M9          2.2392e+00  5.8532e-05  6.2670e+00  7.4605e-03 

 Net Name:  VDD
 Pin Name:  VDD
 Instance Name:  ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen1

 Layer/Via#  PGResistor  Resistance(cumulative) Ohm  Voltage_Drop(cumulative) V  Length 
 VSRC       N 0.0000e+00 0.0000e+00 3.7865e-03 3.7865e-03  0  144.43150,550.00000   
 AP         N 1.0000e-06 1.0000e-06 0.0000e+00 3.7865e-03  0.000100000001  144.43150,550
 AP         N 3.1474e-03 3.1484e-03 5.6028e-06 3.7921e-03  6.8432998  144.43200,550.0000
 AP         N 1.0000e-06 3.1494e-03 0.0000e+00 3.7921e-03  0.000200000003  144.43200,543
 AP         N 1.9433e-03 5.0927e-03 1.1802e-05 3.8039e-03  4.1663999  144.43200,543.1565
 AP         N 2.5653e-03 7.6580e-03 1.7583e-05 3.8215e-03  5.5001001  144.43200,538.9900
 AP         N 1.0137e-02 1.7795e-02 7.0572e-05 3.8921e-03  8.851  144.43200,533.49000   
 AP         N 2.1164e-02 3.8959e-02 1.5050e-04 4.0426e-03  16.0295  144.43200,524.63900 
 AP         N 9.9838e-07 3.8960e-02 0.0000e+00 4.0426e-03  0.054  128.40250,524.63900   
 RV         N 3.3405e-02 7.2365e-02 2.3925e-04 4.2818e-03  2.7  128.40250,524.69300   
 M15        N 9.9838e-07 7.2366e-02 0.0000e+00 4.2818e-03  0.6985  128.40250,524.69300  
 M15        N 1.0580e-01 1.7817e-01 4.3488e-04 4.7167e-03  14.947  127.70400,524.69300  
 VIA14      N 8.8155e-03 1.8698e-01 5.1737e-05 4.7684e-03  0.324  127.70400,539.64000   
 M14        N 3.5033e-02 2.2201e-01 1.1855e-04 4.8870e-03  4.96  127.70400,539.64000   
 M14        N 1.6951e-01 3.9153e-01 1.3857e-03 6.2727e-03  24  132.66400,539.64000   
 M9         N 9.5367e-07 6.2670e+00 0.0000e+00 7.4605e-03  0.26  187.49200,516.86300 
      
 Layer/Via  Resistance(Ohm)  Voltage_Drop(V)  R_Cumulative(Ohm)  Vdrop_Cummulative(V) 
 VSRC        0.0000e+00  3.7865e-03  0.0000e+00  3.7865e-03 
 AP          3.8960e-02  2.5606e-04  3.8960e-02  4.0426e-03 
 RV          3.3405e-02  2.3925e-04  7.2365e-02  4.2818e-03 
 M15         1.0580e-01  4.3488e-04  1.7817e-01  4.7167e-03 
 VIA14       8.8155e-03  5.1737e-05  1.8698e-01  4.7684e-03 
 M9          2.2392e+00  5.8532e-05  6.2670e+00  7.4655e-03 

文件数据将重复使用网名Pin Name作为VDD、VSS、VDDA、VSSA。就这样.

我想跳过数据在层/Via#之后的数据,直到层/Via之前,并且我只想考虑在层/Via之后的M9数据,最后一个值为“例如: 7.4605e-03,7.4655e-03”e 216

我试过的逻辑

代码语言:javascript
复制
def readPinFile(filename): 

    result = None
    with open(filename, "r") as file:   
        flag_count = 0
        flag_count1 = 0
        result = {}
        result1 = {}
        lastPin = None        
        for line in file:
            lines = line.strip()
            
            if lines[-3:] == "VDD": 
                Pin = lines.split(" ")[3]          
                result[Pin] = {"INST": None, "M9": None}

            if lines[-3:] == "VSS": 
                Pin = lines.split(" ")[3]               
                result[Pin] = {"INST": None, "M9": None}    
 
                
            if lines[:9] == "Instance ":
                result[Pin]["INST"] = lines.split(" ")[3]
            
            if lines.startswith("Layer/Via "):
               flag_count1 = 1
           
            if lines[:2] == "M9" and flag_count1 == 1:
               result[Pin]["M9"] = lines.split(" ")[14]
             
          

    return result
pin_of_file1 = readPinFile("inst_1.txt") 

for pin, pin_data in pin_of_file1.items():
   # pass 
    print(pin_data)  

我之所以使用这个块,是因为这个文件包含了作为VSS的net和pin名称(上面的数据,例如,网名、和引脚名将更改每个块,格式是相同的)

代码语言:javascript
复制
if lines[-3:] == "VSS": 
     Pin = lines.split(" ")[3]               
     result[Pin] = {"INST": None, "M9": None} 

与我为其他程序处理文件数据所用的逻辑相同,它在这里用作循环,而不是循环期望的输出

代码语言:javascript
复制
{'Pin_Name': 'VDD', 'inst': 'ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen', 'M9': '7.4605e-03'}
{'Pin_Name': 'VDD', 'inst': 'ld_slice_logic_wrap_inst/ld_slice_logic_top_inst/ld_clk_gen_top_inst/ld_wdqs_clk_gen', 'M9': '7.4655e-03'}

我得到的输出是

代码语言:javascript
复制
{'Pin_Name': 'VDD', 'Net_Name': 'VSS', 'M9': '7.4605e-03'}

有人能引导我走出这个世界吗?

EN

回答 2

Stack Overflow用户

发布于 2022-09-27 15:00:29

代码语言:javascript
复制
def readPinFile(filename):

    result = None
    overall_result = None
    with open(filename, "r") as file:
        flag_count = 0
        flag_count1 = 0
        result = {}
        result1 = {}
        lastPin = None
        for line in file:
            lines = line.strip()

            if lines[-3:] == "VDD":
                Pin = lines.split(" ")[3] + str(flag_count)
                result[Pin] = {"INST": None, "M9": None}

            if lines[-3:] == "VSS":
                Pin = lines.split(" ")[3]
                result[Pin] = {"INST": None, "M9": None}

            if lines[:9] == "Instance ":
                result[Pin]["INST"] = lines.split(" ")[3]

            if lines.startswith("Layer/Via "):
                flag_count1 = 1

            if lines[:2] == "M9" and flag_count1 == 1:
                result[Pin]["M9"] = lines.split(" ")[14]
                flag_count1 = 0
                flag_count = flag_count + 1

    return result


pin_of_file1 = readPinFile("inst_1.txt")

for pin, pin_data in pin_of_file1.items():
    # pass
    print(pin_data)
票数 0
EN

Stack Overflow用户

发布于 2022-09-27 15:02:00

您可能会发现这种方法更健壮:

代码语言:javascript
复制
def readPinFile(filename):
    values = []
    inLayer = False
    d = {}
    with open(filename) as data:
        for line in map(str.strip, data):
            if not inLayer:
                for k1, k2 in ('Net Name:', 'Net_Name'), ('Pin Name:', 'Pin_Name'):
                    if line.startswith(k1):
                        d[k2] = line.split()[-1]
                        continue
            if len(tokens := line.split()) > 1:
                if tokens[0] == 'Layer/Via':
                    inLayer = True
                elif inLayer and tokens[0] == 'M9':
                    d['M9'] = tokens[-1]
                    values.append(d)
                    d = {}
                    inLayer = False
    return values

输出:

代码语言:javascript
复制
[{'Net_Name': 'VDD', 'Pin_Name': 'VDD', 'M9': '7.4605e-03'}, {'Net_Name': 'VDD', 'Pin_Name': 'VDD', 'M9': '7.4655e-03'}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73869233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档