【问题标题】:feed class from list列表中的提要类
【发布时间】:2023-05-19 11:26:01
【问题描述】:

我还是 python 的新手,但我用它来做我的语言学研究。

所以我正在对地名进行一些研究,并从一个地形机构获得了一份输入数据列表,如下所示: Official_Name, tab, Dialect_Name, tab, Administrative_district, Topographic_district, Y_coordinates, X_coordinates, Longitude, Latitude。

所以,我定义了一个类:

class MacroTop:
      def __init__(self, Official_Name, Dialect_Name, Adm_District, Topo_District, Y, X, Long, Lat):
          self.Official_Name = Official_Name
          self.Dialect_Name = Dialect_Name
          self.Adm_District = Adm_District
          self.Topo_District = Topo_District
          self.Y = Y
          self.X = X
          self.Long = Long
          self.Lat = Lat

所以,对于open(),我想加载我的.txt 文件,其中包含我必须使用循环将其读入类的数据,但它不起作用。

我想要的结果是能够访问该类的一个特性,例如 Dialect_Name 并能够查看该特性的所有条目。我可以在循环中执行此操作,但我想定义一个类,以便之后可以进行更多操作。

我的循环:

with open("locLuxAll.txt", "r") as topo_list:
    lines = topo_list.readlines()
    for line in lines:
        line = line.split('\t')
        print(line)
        print(line[0])  # This would access all the data that is characterized as Official_Name

我尝试制作另一个循环:

for i in range(0-len(lines)):
        lines[i] = MacroTop(str(line[0]), str(line[1]), str(line[2]), str(line[3]), str(line[4]), str(line[5]), str(line[6]), str(line[7]))

但这似乎不起作用。

【问题讨论】:

    标签: python list class linguistics


    【解决方案1】:

    此行失败:

    for i in range(0-len(lines)):
    

    我猜你正试图遍历负数,所以输出将是一个空列表。

    In [11]: [i for i  in range(-200)]
    Out[11]: []
    

    编辑: 你的代码对我来说似乎无法阅读,你有 for i in range(len(lines)) 但在这个 for 循环中,你正在迭代 line 变量,它来自哪里?首先,我不会回信给lines 列表,因为它来自readlines。为此创建新列表,并且您不需要i 变量,无论如何这些行都会保持顺序。

    class_lines = []
    for line in lines:
        class_lines.append(MacroTop(str(line[0]), str(line[1]), str(line[2]), str(line[3]), str(line[4]), str(line[5]), str(line[6]), str(line[7])))
    

    甚至是列表理解:

    class_lines = [MacroTop(str(line[0]), str(line[1]), str(line[2]), str(line[3]), str(
        line[4]), str(line[5]), str(line[6]), str(line[7])) for line in lines]
    

    【讨论】:

    • 哦,我看到了那里的错误。将其更改为 range(len(lines)。但是,输出仍然不是我想要的,因为该类没有被数据提供。还有更多想法吗?
    • @MSam 您的初始代码中存在逻辑错误,但如果有帮助,请查看我的更新答案
    • 我应该纠正我最初的搜索,我觉得我表达得不好。
    • 我收到了一个上面提到的名称和坐标等文件,然后我将其转换为 .txt 文件。问题是,有大量的数据。它实际上有一千行,每一行都指一个地方。因此,通过使用 print(lines),我可以通过引用 line 获得所有这些实例的列表(我在大多数教程中都使用它,后来将其更改为 var_item,以减少结论)我可以访问不同的变量。例如,如果我使用 print(line[0]),我会得到 Official_Name 的所有实例,依此类推。
    • 所以,我正在寻找一种方法来提供所有数据,将所有 1000 行中的 8 个变量项输入到我的类中,以便能够访问它,而无需单独输入每一行。我之前实际上尝试过您修改过的代码,但这不起作用,这就是我认为我可以遍历行列表(使用 i)的原因。也许我在课堂上做错了什么?