Возникли проблемы при чтении файла с числами (строками) в словарь с целочисленными значениями - PullRequest
0 голосов
/ 30 ноября 2018

Итак, у меня есть файл data.txt, который содержит информацию об автомобиле:

CAR|PRICE|RPM

TOYOTA|21,000|3,600

HONDA|19,000|4,000

И, передав этот файл данных в функцию createCarDictionary, я смог создать словарь, который создает автомобильбренд в качестве ключа и значения в качестве оставшейся информации в текстовом файле, хранящемся в виде списков:

dict1 = {}

def createCarDictionary(datafile):
    for line in datafile.splitlines():
        line = line.replace(',', '')
        key, value, value2 = map(str.strip, line.split('|'))
        dict1[key] = [value, value2]
    return dict1

datafile = open('data.txt', 'r').read()

createCarDictionary(datafile)
print(dict1)

Вывод :

{'HONDA': ['19000', '4000'], 'TOYOTA': ['21000', '3600'], 'CAR': ['PRICE', 'RPM']}

Я пытаюсь преобразоватьчисла в txt-файле в целочисленные значения с использованием цикла for в вышеприведенной функции, но я получаю ошибку, поскольку заголовок CAR|PRICE|RPM - это то, что for loop повторяет в первый раз при сбое моей программы в качестве заголовканигде не может быть преобразовано в целое число

Как я могу преобразовать RPM и PRICE в целые числа в моем dict1, используя мою функцию выше, избегая и удаляя заголовок из конечного результата?

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Вы можете использовать следующий код:

dict1 = {}

def createCarDictionary(datafile):
    for line in datafile.splitlines():
        line = line.replace(',', '')
        key, value, value2 = map(str.strip, line.split('|'))
        dict1[key] = [int(value), int(value2)]
    return dict1

datafile = open('data.txt', 'r').read()

createCarDictionary(datafile)
print(dict1)
0 голосов
/ 16 апреля 2019

Вы можете использовать isdigit метод, который проверяет, состоит ли строка только из цифр

dict1 = {}
def check_string_and_get_number(value):
    if value.isdigit():
       return int(value)
    else:
       return value
def createCarDictionary(datafile):
    for line in datafile.splitlines():
        line = line.replace(',', '')
        key, value, value2 = map(str.strip, line.split('|'))
        value = check_string_and_get_number(value)
        value2 = check_string_and_get_number(value2)
        dict1[key] = [value, value2]
    return dict1

datafile = open('data.txt', 'r').read()

createCarDictionary(datafile)
print(dict1)
0 голосов
/ 30 ноября 2018

Вы можете пропустить первую строку с помощью next после открытия файла с помощью оператора with.

Пример:

dict1 = {}

def createCarDictionary(datafile):
    with open(datafile) as infile:
        next(infile)  #Skip First Line
        for line in infile:
            line = line.replace(',', '')
            key, value, value2 = map(str.strip, line.split('|'))
            dict1[key] = [value, value2]
        return dict1

createCarDictionary('data.txt')
print(dict1)
...