0 / 0 / 0
Регистрация: 23.06.2020
Сообщений: 9

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

23.06.2020, 10:42. Показов 3781. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru