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

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

23.06.2020, 10:42. Показов 3767. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru