[英]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.