簡體   English   中英

Python:從.txt文件填充對象列表

[英]Python: filling a List of objects from a .txt file

對於初學者,在過去的一年半中,我已經使用C ++編程,這是我第一次使用Python。

這些對象具有兩個int屬性,例如i_和j_。

文本文件如下:

1,0
2,0
3,1
4,0
...

我想做的是讓列表填充具有正確屬性的對象。 例如,

print(myList[2].i_, myList[2].j_, end = ' ')

會回來

3 1

這是我在網上閱讀一些內容后的嘗試。

class myClass:
    def __init__(self, i, j):
        self.i_ = i
        self.j_ = j   

with open("myFile.txt") as f:

    myList = [list(map(int, line.strip().split(','))) for line in f]

    for line in f:
        i = 0
        while (i < 28):
            myList.append(myClass(line.split(","), line.split(",")))
            i +=1

但這顯然不起作用。

提前致謝!

由於您使用的是CSV文件,因此您可能要使用csv模塊。 首先,您將文件對象傳遞給csv.reader函數,它將返回文件中可迭代的行。 從那里,您可以將其轉換為列表,並將其切成需要的29行。 最后,您可以遍歷行(例如[1,0]),然后只需將它們解壓縮到類構造函數中即可。

class MyClass:
    def __init__(self, i, j):
        self.i = int(i)
        self.j = int(j)

    def __repr__(self):
        return f"MyClass(i={self.i}, j={self.j})"

with open('test.txt') as f:
    rows = [r.strip().split(',') for r in f.readlines()[:29]]
    my_list = [MyClass(*row) for row in rows]

for obj in my_list:
    print(obj.i, obj.j)

print(len(my_list))

我不確定您要使用myList = [list(map(int, line.strip().split(','))) for line in f] 這將為您提供將這些對轉換為int的列表的列表。 但是您真的想要這些數字中的對象。 因此,當我們遍歷文件中的各行並取消下一個while循環時,讓我們直接執行此操作:

my_list = []
with open("myFile.txt") as f:
    for line in f:
        nums = [int(i) for i in line.strip().split(',') if i]
        if len(nums) >= 2:
            my_list.append(myClass(nums[0], nums[1]))

我不確定您到底要堅持這種格式

print(myList[2].i_, myList[2].j_, end = ' ')

我的解決方案是相當手動編碼的,並且我使用字典來存儲i和j

result = {'i':[],
  'j':[]}

下面是我的代碼

result = {'i':[],
      'j':[]}

with open('a.txt', 'r') as myfile:
    data=myfile.read().replace('\n', ',')
print(data)

a = data.split(",")
print (a)

b = [x for x in a if x]
print(b)

for i in range( 0, len(b)):
    if i % 2 == 0:
        result['i'].append(b[i])
    else:
        result['j'].append(b[i])


print(result['i'])
print(result['j'])
print(str(result['i'][2])+","+ str(result['j'][2]))

結果:3,1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM