Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9

Необходимо реализовать функцию get_books

23.06.2020, 10:42. Показов 3807. Ответов 16

Студворк — интернет-сервис помощи студентам
Пожалуйста, помогите!

Необходимо реализовать функцию get_books.

Функция должна принимать имя файла для чтения

Функция должна возвращать данные из файла в виде списка списков как:

[ ['номер', 'название', 'автор', количество, цена], [...], ... ]

Например, вызов функции как

books = get_books('books.txt')

должен вернуть следующий список списков:

[

['43545-9', 'Python для начинающих', 'Михаил Дроздов', 10, 1890.80],

['59600-2', 'XSLT справочник', 'Семён Мангалов', 15, 3460.50],

[...],

...

первую строку из файла 'номер|название|автор|количество|цена' возвращать не надо.

количество возвращается как int

цена возвращается как float



import books
import pytest
import tempfile, os

Каталог товаров:

csv = """номер|название|автор|количество|ц ена
43545-9|Python для начинающих|Михаил Дроздов|10|1890.80
59600-2|XSLT справочник|Семён Мангалов|15|3460.50
32168-3|Программирование на Python|Марк Полевой|8|2728.90
44935-9|Изучаем Python|Марк Прыгунов|21|3420.85
47178-2|Ajax для дураков|Сергей Иванов|32|1180.90
78439-5|Сетевые дела на Python|Эдуард Медведев|23|3149.50
59037-7|Программируем на Lua|Роберт Иерусалимский|12|3710.49
12345-1|Python - просто как 2х2|Анонимус|11|999.99
78439-9|Обучаем машины на Java|Борис Калужный|45|3447.99"""

Спасибо за ответ!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.06.2020, 10:42
Ответы с готовыми решениями:

Необходимо реализовать функцию, которая для заданного целого числа меняет порядок цифр в нем на обратный
Необходимо реализовать функцию, которая для заданного целого числа меняет порядок цифр в нем на обратный. Продемонстрировать работу...

Реализовать функцию для кодирования данных, содержащих битовые поля. В решении необходимо использовать побитовые операци
Помогите реализовать функцию см. картинка

Задан список MY_LIST. Необходимо реализовать функцию, возвращающую словарь, в котором ключом выступает тип элемента, име
Задан список MY_LIST. Необходимо реализовать функцию, возвращающую словарь, в котором ключом выступает тип элемента, имеющегося в списке, а...

16
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 11:09
Python
1
2
3
4
5
6
7
8
9
10
11
12
import csv
 
 
def get_books(file):
    books = []
    with open(file, 'r') as rf:
        reader = csv.reader(rf)
        next(reader) # Пропускаем первую строку
        for line in reader:
            if line:
                books.append(list(line.pop().split('|')))
    return books
Добавлено через 8 минут
Чтобы количество и цена вносились как числа замените:
Python
1
2
if line:
    books.append(list(line.pop().split('|')))
на
Python
1
2
3
4
5
if line:
    tmp = list(line.pop().split('|'))
    book = tmp[:2]
    book.append(int(tmp[3]))
    book.append(float(tmp[4]))
1
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 11:22  [ТС]
Спасибо за ответ! Я правильно понимаю, что нужно создать файл books.txt, поместить туда каталог товаров и заменить file на books.txt?
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 11:26
Explosive1, нужно создать CSV-файл, у вас же вот указано
Цитата Сообщение от Explosive1 Посмотреть сообщение
csv =
Добавлено через 1 минуту
А, я не правильно понял. Да, можете записать в обычный txt-файл и читать его тогда вот-так:
Python
1
2
3
4
5
6
7
8
9
10
def get_books(file):
    books = []
    with open(file, 'r') as rf:
        for line in rf[1:]:
            if line:
                tmp = list(line.pop().split('|'))
                book = tmp[:2]
                book.append(int(tmp[3]))
                book.append(float(tmp[4]))
    return books
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 11:54  [ТС]
А нужно поменять file из get_books(file) на что-то?
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 12:06
Explosive1, вы передаете в ту функцию путь к файлу
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 12:11  [ТС]
Я пишу туда books.txt, а он выдает ошибку SyntaxError: invalid syntax и показывает на точку.
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 12:49
Explosive1, приведите пример кода
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 13:32  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
def get_books(books.txt) :
    books = []
    with open(books.txt, 'r') as rf:
        for line in rf[1:]:
            if line:
                tmp = list(line.pop().split('|'))
                book = tmp[:2]
                book.append(int(tmp[3]))
                book.append(float(tmp[4]))
    return books

В books.txt находится список книг:

csv = """номер|название|автор|количество|ц ена
43545-9|Python для начинающих|Михаил Дроздов|10|1890.80
59600-2|XSLT справочник|Семён Мангалов|15|3460.50
32168-3|Программирование на Python|Марк Полевой|8|2728.90
44935-9|Изучаем Python|Марк Прыгунов|21|3420.85
47178-2|Ajax для дураков|Сергей Иванов|32|1180.90
78439-5|Сетевые дела на Python|Эдуард Медведев|23|3149.50
59037-7|Программируем на Lua|Роберт Иерусалимский|12|3710.49
12345-1|Python - просто как 2х2|Анонимус|11|999.99
78439-9|Обучаем машины на Java|Борис Калужный|45|3447.99"""
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 13:39
Explosive1, ну что же вы, вообще ничего не понимаете? Ни капли?

Добавлено через 56 секунд
Во-первых, функцию нужно вызывать
Во-вторых, как аргумент нужно передавать строку - путь к файлу
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 14:21  [ТС]
Скажите, пожалуйста, в чем тут ошибка:

Python
1
2
3
4
5
6
7
8
9
10
11
def get_books(file):
    books = []
    with open(file, 'r') as rf:
        for line in rf[1:]:
            if line:
                tmp = list(line.pop().split('|'))
                book = tmp[:2]
                book.append(int(tmp[3]))
                book.append(float(tmp[4]))
    return books
get_books('books.txt')
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 14:43
Explosive1, а в чем ошибка? Что не так?
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 14:45  [ТС]
Traceback (most recent call last):
File "main.py", line 11, in <module>
get_books('books.txt')
File "main.py", line 4, in get_books
for line in rf[1:]:
TypeError: '_io.TextIOWrapper' object is not subscriptable
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 14:59
Лучший ответ Сообщение было отмечено Explosive1 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
def get_books(file):
    books = []
    with open(file, 'r') as rf:
        src = rf.readlines()
        for line in src[1:]:
            if not line.isspace():
                tmp = list(line.split('|'))
                book = tmp[:2]
                book.append(int(tmp[3]))
                book.append(float(tmp[4]))
        books.append(book)
    return books
0
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 15:10  [ТС]
main.py:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def get_books(file):
    books = []
    with open(file, 'r') as rf:
        src = rf.readlines()
        for line in src[1:]:
            if not line.isspace():
                tmp = list(line.split('|'))
                book = tmp[:2]
                book.append(int(tmp[3]))
                book.append(float(tmp[4]))
        books.append(book)
    return books
get_books('books.txt')
books.txt:

csv = """номер|название|автор|количество|ц ена
43545-9|Python для начинающих|Михаил Дроздов|10|1890.80
59600-2|XSLT справочник|Семён Мангалов|15|3460.50
32168-3|Программирование на Python|Марк Полевой|8|2728.90
44935-9|Изучаем Python|Марк Прыгунов|21|3420.85
47178-2|Ajax для дураков|Сергей Иванов|32|1180.90
78439-5|Сетевые дела на Python|Эдуард Медведев|23|3149.50
59037-7|Программируем на Lua|Роберт Иерусалимский|12|3710.49
12345-1|Python - просто как 2х2|Анонимус|11|999.99
78439-9|Обучаем машины на Java|Борис Калужный|45|3447.99"""

Пишет ошибку:

Traceback (most recent call last):
File "main.py", line 13, in <module>
get_books('books.txt')
File "main.py", line 10, in get_books
book.append(float(tmp[4]))
ValueError: could not convert string to float: '3447.99"""'
0
291 / 193 / 104
Регистрация: 14.11.2017
Сообщений: 489
23.06.2020, 16:16
Explosive1, о Господе, ну включите вы уже голову и подумайте хоть немного. Там в ошибке все написано
Цитата Сообщение от Explosive1 Посмотреть сообщение
csv = """номер|название|автор|количество|ц ена
43545-9|Python для начинающих|Михаил Дроздов|10|1890.80
59600-2|XSLT справочник|Семён Мангалов|15|3460.50
32168-3|Программирование на Python|Марк Полевой|8|2728.90
44935-9|Изучаем Python|Марк Прыгунов|21|3420.85
47178-2|Ajax для дураков|Сергей Иванов|32|1180.90
78439-5|Сетевые дела на Python|Эдуард Медведев|23|3149.50
59037-7|Программируем на Lua|Роберт Иерусалимский|12|3710.49
12345-1|Python - просто как 2х2|Анонимус|11|999.99
78439-9|Обучаем машины на Java|Борис Калужный|45|3447.99"""
Вы прям это все в файл и скопировали? Тогда я ничем вам не помогу, увы

Добавлено через 56 минут
Explosive1, в файле должен быть только текст
Code
1
2
3
4
5
6
7
8
9
10
номер|название|автор|количество|цена
43545-9|Python для начинающих|Михаил Дроздов|10|1890.80
59600-2|XSLT справочник|Семён Мангалов|15|3460.50
32168-3|Программирование на Python|Марк Полевой|8|2728.90
44935-9|Изучаем Python|Марк Прыгунов|21|3420.85
47178-2|Ajax для дураков|Сергей Иванов|32|1180.90
78439-5|Сетевые дела на Python|Эдуард Медведев|23|3149.50
59037-7|Программируем на Lua|Роберт Иерусалимский|12|3710.49
12345-1|Python - просто как 2х2|Анонимус|11|999.99
78439-9|Обучаем машины на Java|Борис Калужный|45|3447.99
csv = ... - это переменная для записи этого текста в файл. А так как вы ничего писать не будете, то стоит просто скопировать в файл сам текст, без обозначения переменной
Разве так сложно было понять что там лишнее?
1
0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9
23.06.2020, 16:23  [ТС]
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.06.2020, 16:23
Помогаю со студенческими работами здесь

Необходимо реализовать функцию IsDigit(C) котлин
Количество цифр Дано три символа. Требуется определить, сколько из них являются цифрами. При решении данной задачи необходимо...

необходимо реализовать функцию перегона из текстового файла в массив строк
необходимо реализовать функцию перегона из текстового файла выбранного в окне ListView в массив строк. Код исходный: private void...

Необходимо реализовать требуемую рекурсивную функцию, и проверить ее на тестовых данных, вводимых с клавиатуры
Для данного числа N вывести значение F( N ) где : F( N ) = { 1, N Э {0,2} { (F(N-1) + F (N+1))/2

Необходимо на основе динамических списков необходимо реализовать словарь и хранить его во внешней памяти
Нужна помощь в исправлении ошибок в коде. Задание звучит так: На основе динамических списков необходимо реализовать словарь и хранить его...

Необходимо реализовать шаблонный класс Array, и грамотно реализовать push_back
Необходимо реализовать шаблонный класс Array, параметризируемый типом хранимых элементов. Класс Array представляет собой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru