Python:从.txt文件填充对象列表 对于初学者,我在过去的一年半里用C++编程,这是我第一次使用Python。

Python:从.txt文件填充对象列表 对于初学者,我在过去的一年半里用C++编程,这是我第一次使用Python。,python,list,file,text,Python,List,File,Text,这些对象有两个int属性,比如i_u和j_u 文本文件如下: 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("m

这些对象有两个int属性,比如i_u和j_u

文本文件如下:

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
class-myClass:
定义初始(self,i,j):
self.i=i
self.j_uj=j
将open(“myFile.txt”)作为f:
myList=[f中的行的列表(map(int,line.strip().split(','))]
对于f中的行:
i=0
而(i<28):
追加(myClass(line.split(“,”),line.split(“,”))
i+=1
但它显然不起作用


提前谢谢

我不确定您想用
myList=[list(map(int,line.strip().split(','))为f中的行执行什么操作]
。这将为您提供一个列表,其中这些对转换为整数。但你真的想要这些数字中的对象。因此,让我们在遍历文件中的行时直接执行此操作,并消除下一个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

由于您使用的是CSV文件,因此可能需要使用
CSV
模块。首先,您将文件对象传递给
csv.reader
函数,它将从文件返回一个iterable行。从那里,您可以将其转换为一个列表,并将其分割为需要的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))

您的
def
需要indented@vash_the_stampede是的,我没有正确粘贴它,它在我的代码中缩进了!当(i<28):时,你想用
做什么。为什么是28?很抱歉@slider,忘了提及。列表大小必须是29,因为我们的作业是这样说的。有29个物体。我想我可以用一段时间!但我的问题是,我不能把第一个数字和第二个数字用逗号隔开,然后把它们放在列表中对象的相应属性中。嗨,太棒了!但是我得到:
ValueError:没有足够的值来解包(预期为2,得到1)
@PersiaShahdi文件中有一行不是
1,0
类型的吗?有像
1,2,18
这样的行被空行分隔。但是这不会导致错误说<代码>预期2,得到3</代码>?@ PrsiasHadiDok,让我们非常防御,只考虑用<代码> > 2 > /代码>数字(见更新答案)。不幸的是,我们不能接触数据库,它是一个.txt文件,所以我必须处理它。没有正在使用的数据库。你的意思是你不能使用标准库吗?我更新了示例,只使用内置函数。如果我有误解,我很抱歉,但你写道:用open('csv1.csv')作为f:我的意思是,我没有.csv文件,我有一个.txt文件,我无法触摸(或者不知何故变成csv文件)如果我误解了csv是txt文件,请再次道歉。只需将文件名更改为您自己的文件名,它仍然可以工作。