Чтение файла данных и составление списка из объектов - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть некоторые данные в отдельном файле, например:

bob 11 20
sam 30 19
jay 50 10

и т. Д. Я пытаюсь:

  1. Открыть файл.
  2. Прочитайте каждую строку.
  3. Создайте объект с данными из этой строки.

Я собираюсь сделать это примерно так:

with open("data.txt") as f:
    for lines in f:
        f.readlines()
data = lines.split()

Это правильный способ убедиться, что каждая строка хранится в своем собственном списке?Как например [Боб, 11, 20]?

Ответы [ 5 ]

0 голосов
/ 07 февраля 2019

Я определил класс Person (как пример для объекта), который создается с использованием каждой строки файла

class Person:
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.weight = weight

    def __str__(self):
        return 'name:{},age:{},weight:{}'.format(self.name, self.age, self.weight)


persons = []
with open('data.csv', 'r') as f:
    lines = f.readlines()
    for line in lines:
        fields = line.split(' ')
        persons.append(Person(fields[0], fields[1], fields[2]))
for person in persons:
    print(person)

0 голосов
/ 07 февраля 2019

Сегодня, просто работая со множеством списков, я могу предложить другое решение: получить каждую строку в виде списка и составить список этих списков, например, [['bob 11 20'], ['sam 30 19'], ['jay 50 10']] Я использовал эту функцию:

def read(): reader = csv.reader(open("list.txt"), delimiter="\t") list = [r for r in reader] print(list)

Существует множество способов работы со списками, и тот, который работает для вашего проекта, является «правильным».Ранее сегодня я разбирал запросы sqlalchemy на словари, преобразовывал их в строки и передавал их в формат даты и времени, чтобы они снова добавляли их вместе!Вы можете сохранить строки по отдельности, если это то, что вам нужно, или, повторяя их снова с помощью функции, получить более детализированные данные для своего проекта.Удачи!

0 голосов
/ 07 февраля 2019

Нет, это даст вам только последнюю строку, вы должны вместо этого сделать это так:

data = []
with open("data.txt") as f:
    for line in f:
        data.append(line.split())
0 голосов
/ 07 февраля 2019

Этот код поможет вам:

data = []
lines = [line.rstrip('\n') for line in open('data.txt')]
for line in lines:
   data.append({'name' : line.split()[0], 'something1' : line.split()[1], 'something2' : line.split()[2]})

Вы можете легко зацикливать или даже получать информацию о данных

0 голосов
/ 07 февраля 2019

Вы можете перебрать генератор файлов в понимании списка и разбить каждую строку на списки элементов:

with open("data.txt") as f:
    data = [line.split() for line in f]
...