Не могу уложиться в 1 секунду - PullRequest
0 голосов
/ 09 января 2020

Вместо 1000 мс мой код соответствует 1014. Пожалуйста, помогите мне с оптимизацией

Условие:

В офисной программе Excel (или ее аналогов), вы всегда можете сохранить таблицу в формате csv. Представьте, что эта функциональность нарушена. Напишите свой собственный транскодер excel -> csv, используя соответствующие библиотеки. Ваша программа должна открыть файл data.xlsx, содержащий произвольные данные, и сохранить результат в файле output.csv

Формат ввода: Не

Формат вывода : В файле output.csv выведите данные из исходного файла в формате csv. Разделитель - «точка с запятой» Кавычки - кавычки

Примечания: Используйте модуль CSV

Мой код

import csv
import openpyxl
from openpyxl import Workbook


wb = openpyxl.load_workbook(filename='data.xlsx', data_only=True)
with open('output.csv', 'w', newline='', encoding="utf8") as csvfile:
    writer = csv.writer(csvfile, delimiter=';', quotechar='"')
    ws = wb.active
    rows = []
    for row in ws.values:
        w = map(lambda x: float(x) if x is not None and type(x) != str else x, row)   
        rows.append(w)
    writer.writerows(rows)

вам нужно оптимизировать код, но чтобы все функциональные возможности оставались

Примеры тестов:

enter image description here

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

w = map(lambda x: float(x) if x is not None and type(x) != str else x, row)

их нельзя опускать

ссылка на тестовый файл xlsx : https://yadi.sk/i/bF-5kOMTuyuMMg

1 Ответ

1 голос
/ 09 января 2020

Плавающее преобразование может быть немного быстрее с:

w = map(lambda x: float(x) if type(x) is int else x, row)   
...