Python: заполнение списка объектов из файла .txt - PullRequest
0 голосов
/ 24 октября 2018

Для начала, я программировал на 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

Но, очевидно, это не сработает.

Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 24 октября 2018

Я не уверен, что вы на самом деле придерживаетесь этого формата

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

0 голосов
/ 24 октября 2018

Поскольку вы работаете с CSV-файлом, вы можете использовать модуль csv.Сначала вы передадите объект file в функцию 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))
0 голосов
/ 24 октября 2018

Я не уверен, что вы пытаетесь сделать с myList = [list(map(int, line.strip().split(','))) for line in 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]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...