【问题标题】:How to index class information如何索引类信息
【发布时间】:2022-01-02 03:26:28
【问题描述】:

在尝试将数据从 txt 文件存储到 python 类时,我遇到了一个问题,我不知道如何在类中存储信息并按索引和数据类型检索它。在所有转换之后,我有 n 个包含数据的列表。

这是来自 txt 文件的示例数据:

Date       Time      Latit(N)  Long(E)   Depth(km)     MD   ML   Mw    Region                                            Method
---------- --------  --------  -------   ----------    ------------    -----------                                       -------
2021.12.18 22:27:57  36.2620   28.9352       10.5      -.-  3.1  3.2   AKDENIZ                                           Quick
2021.12.18 21:53:20  35.0258   25.7753        5.0      -.-  2.7  -.-   GIRIT ADASI ACIKLARI (AKDENIZ)                    Quick
2021.12.18 21:26:37  36.9778   27.7713        3.8      -.-  1.6  -.-   GOKOVA KORFEZI (AKDENIZ)                          Quick
2021.12.18 20:35:30  37.8640   35.1760        5.4      -.-  1.5  -.-   PINARBASI-CAMARDI (NIGDE)                         Quick
2021.12.18 19:23:36  37.8505   26.7575        7.5      -.-  2.0  -.-   EGE DENIZI                                        Quick
2021.12.18 18:27:00  37.7900   32.0702        4.3      -.-  1.4  -.-   YATAGAN-MERAM (KONYA)                             Quick
2021.12.18 18:19:10  41.1435   43.9102        9.5      -.-  2.1  -.-   ERMENISTAN                                        Quick
2021.12.18 17:19:05  39.8660   41.8363       15.0      -.-  1.6  -.-   KAYABASI-KOPRUKOY (ERZURUM)                       Quick

这是课程:

import re

class txt_data:
    def __init__(self, result):
       
       for i in result:
           
            self.date = result[i][0]
            self.time = result[i][1]
            self.latit = result[i][2]
            self.long = result[i][3]
            self.depth = result[i][4]
            self.md = result[i][5]
            self.ml = result[i][6]
            self.mw = result[i][7]
            self.region = result[i][8]
            self.method = result[i][9]
    
  
    def date(self):
        return self._date

  
    def time(self):
        return self._time

  
    def latit(self):
        return self._latit

  
    def long(self):
        return self._long

  
    def depth(self):
        return self._depth

  
    def md(self):
        return self._md

  
    def ml(self):
        return self._ml

  
    def mw(self):
        return self._mw

  
    def region(self):
        return self._region

  
    def method(self):
        return self._method     

#regex 
ptn = re.compile(
    r"^([\d.]+)\s+([\d:]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\w\s()-]+?)\s+([\w]+[\d]+\s+\([^)]*\)|\s+[a-zA-Z]+)$")

result = []
with open("input.txt") as fic:
    fic.readline()  # header
    fic.readline()  # dash
    for line in fic:
        parts = ptn.findall(line.rstrip())
        result.append(txt_data)

下面是正则表达式之后的数据在循环内的“部分”中的样子:

[('2021.12.03', '01:50:08', '41.1905', '33.9327', '5.0', '-.-', '1.3', '-.-', 'HUSEYINLI-(KASTAMONU)', ' Quick')]
[('2021.12.03', '01:45:31', '39.1132', '41.1728', '8.4', '-.-', '2.2', '-.-', 'BAGLIISA-KARLIOVA (BINGOL)', ' Quick')]
[('2021.12.03', '00:49:20', '37.6933', '26.0342', '5.0', '-.-', '2.0', '-.-', 'ONIKI ADALAR (MEDITERRANEAN SEA)', ' Quick')]
[('2021.12.03', '00:24:51', '37.1293', '28.6973', '11.3', '-.-', '1.4', '-.-', 'TURGUT-ULA (MUGLA)', ' Quick')]
[('2021.12.03', '00:22:08', '40.7790', '31.5120', '11.2', '-.-', '1.0', '-.-', 'KIZILAGIL-(BOLU)', 'REVISE01   (2021.12.03 00:22:17)')]
[('2021.12.03', '00:08:58', '39.8367', '41.8367', '3.3', '-.-', '0.9', '-.-', 'MARIFET-KOPRUKOY (ERZURUM)', ' Quick')]
[('2021.12.03', '00:04:24', '41.2267', '43.9693', '5.5', '-.-', '1.9', '-.-', 'GURCISTAN', ' Quick')]
[('2021.12.02', '23:49:30', '39.4655', '28.2327', '7.5', '-.-', '2.0', '-.-', 'EMIRLER-BIGADIC (BALIKESIR)', ' Quick')]
[('2021.12.02', '22:42:05', '37.0915', '28.3208', '13.6', '-.-', '0.8', '-.-', 'YENICE-(MUGLA)', ' Quick')]
[('2021.12.02', '22:29:24', '36.9605', '28.1775', '13.0', '-.-', '1.5', '-.-', 'KARACA-MARMARIS (MUGLA)', ' Quick')]

问题是如何修复我的类以将数据添加到其中并使用索引进行检索。我尝试在课堂内循环,但无法正常工作。

非常感谢您。

【问题讨论】:

    标签: python list loops class nested


    【解决方案1】:

    只需将parts 列表的第一项发送到您的类,并在构造函数中删除for 循环:

    import re
    
    class txt_data:
        def __init__(self, result):
    
            self.date = result[0]
            self.time = result[1]
            self.latit = result[2]
            self.long = result[3]
            self.depth = result[4]
            self.md = result[5]
            self.ml = result[6]
            self.mw = result[7]
            self.region = result[8]
            self.method = result[9]    
    
    #regex 
    ptn = re.compile(
        r"^([\d.]+)\s+([\d:]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\d.]+|-\.-)\s+([\w\s()-]+?)\s+([\w]+[\d]+\s+\([^)]*\)|\s+[a-zA-Z]+)$")
    
    result = []
    with open("input.txt") as fic:
        fic.readline()  # header
        fic.readline()  # dash
        for line in fic:
            parts = ptn.findall(line.rstrip())
            result.append(txt_data(parts[0]))
            
    print(result[3].region)  # PINARBASI-CAMARDI (NIGDE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-01
      • 2013-08-07
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      相关资源
      最近更新 更多