Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/40: Рейтинг темы: голосов - 40, средняя оценка - 4.98
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60

Конвертация из CSV в Excel (XLS)

16.10.2017, 10:39. Показов 8425. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем, привет!

Есть табличка с результатами выполнения тестов, которая сохранена в CSV формат:

Application control All Components disabled (logonsessions.exe) 1.93030633333333
Application control default Settings (logonsessions.exe) 1.943336
Application control ON_DLL_On_Cache_On (logonsessions.exe) 2.717548
Application control ON_DLL_OFF_Cache_OFF (logonsessions.exe) 2.73215666666667

Как перегнать данные результаты в Excel (XLS) файл (файл не важно с каким названием), просто нужно из CSV переместить данные в Excel (XLS). Но в Excel (XLS) будет другая табличка с другими названиями колонок, главное это необходимые ячейки, сама табличка Excel (XLS) уже подготовлена.

Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2017, 10:39
Ответы с готовыми решениями:

Конвертация json в csv или xls
Добрый день, необходимо конвертировать файл json в табличный вид. On-line конверторы не подходят, т.к. файл достаточно большой (100 МБ)....

Опросник на PHP (MySQL) с возможностью экспорта в CSV, XLS(Excel)
Добрый день, есть ли у кого-то скрипт или пример опросника на PHP с БД или без, но при этом была возможность экспорта в Excel или что-то...

Конвертация xls в jpg
Всем привет, помогите, плз, написать программу, которая будет конвертировать определенный диапазон из xls-файла в jpg. При этом должны...

18
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
16.10.2017, 13:18
Библиотека openpyxl.
0
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
16.10.2017, 16:37  [ТС]
Вообщем прочитал файл через модуль csv:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import csv
 
def csv_reader(file_obj):
    """
    Read a csv file
    """
    reader = csv.reader(file_obj, delimiter =' ', quotechar='|')
    for row in reader:
        print(" ".join(row))
 
if __name__ == "__main__":
    csv_path = "F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Kess 2.0.0.385\Report_385.csv"
    with open(csv_path, "r") as f_obj:
        csv_reader(f_obj)
Вывод:

Bash
1
2
3
4
On-Demand Scan test;19.4590926666667
OAS test local Copying;55.759301
OAS test Copying to Server;93.7605833333333
OAS test From to Server;47.345916
Но как теперь отделить только числа?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
16.10.2017, 17:35
Python
1
2
s = " ".join(row)
print(s.split(';')[-1])
1
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
16.10.2017, 17:51
NickMur, немного внимательнее всмотритесь в тот пример, который бездумно скопипастили из документации.

vic5710, а вы не путайте человека.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
16.10.2017, 17:52
dondublon, каков вопрос таков ответ
0
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
16.10.2017, 18:16  [ТС]
vic5710, dondublon,
Ребят спасибо, получаю перебор из одних чисел.
Буду думать дальше как эти числа добавить в необходимые ячейки xls.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
16.10.2017, 18:57
NickMur, если у тебя xls( не xlsx) достаточно xlrd,xlwt модулей
http://webtoks.ru/python/ispol... yx-dannyx/
1
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
16.10.2017, 23:59  [ТС]
В итоге вывожу числа, создаю xls файл, но записывается только последнее число.

Результат выполнения кода на отсеивание чисел:

0.33312
0.867767
9.323123

Попадает в ячейку только 9.323123
При создании ячейки я помещаю результат выполнения функции csv_reader

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import xlwt
import xlrd
import csv
 
path_to_xls = "D:/Learn/Python/Python/Scripts/Other/CSV/test1.xls"
 
def csv_reader(file_obj):
    """
    Read a csv file
    """
    reader = csv.reader(file_obj, delimiter=' ', quotechar='|')
    for row in reader:
        s = " ".join(row)
        list_numbers = s.split(';')[-1]
        print(list_numbers)
 
        workbook = xlwt.Workbook()
        sheet = workbook.add_sheet('rr_1')
        sheet.write(0, 0, list_numbers)
        workbook.save(path_to_xls)
 
if __name__ == "__main__":
    csv_path = "D:\Learn\Python\Python\Scripts\Other\CSV\csv.csv"
    with open(csv_path, "r") as f_obj:
        csv_reader(f_obj)
Вопрос, как контролировать результат вывода функции? Как записывать нужное число из вывода в нужную ячейку?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
17.10.2017, 00:53
зачем вы в цикле открываете листы? и все пишете в ячейку с индексом (0,0) ?

0
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
17.10.2017, 08:38  [ТС]
vic5710, согласен не правильно открывать в цикле листы, переделаю, сейчас думаю как заполнить значениями ячейки
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
17.10.2017, 10:16
Python
1
2
3
4
5
6
import xlwt
wb = xlwt.Workbook()
sheet = wb.add_sheet('Sheet0')
for i in range(10):
    sheet.write(0,i,str(i)*i)
wb.save('test.xls')
1
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
17.10.2017, 23:50  [ТС]
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import xlwt
import xlrd
import csv
 
path_to_xls = "D:/Learn/Python/Python/Scripts/Other/CSV/test1.xls"
path_to_txt = "D:/Learn/Python/Python/Scripts/Other/CSV/test.txt"
 
def csv_reader(file_obj):
    ### Read a csv file ###
    reader = csv.reader(file_obj, delimiter=' ', quotechar='|')
 
    ### Create a xls file ###
    workbook = xlwt.Workbook()
    sheet = workbook.add_sheet('Performance_Results')
 
    i = 0
    for row in reader:
        s = " ".join(row)
        list_numbers = s.split(';')[1]
        for cell in[list_numbers]:
            sheet.write(i, 0, cell)
            print (list_numbers)
            i += 1
            workbook.save(path_to_xls)
 
if __name__ == "__main__":
    csv_path = "D:\Learn\Python\Python\Scripts\Other\CSV\csv.csv"
    with open(csv_path, "r") as f_obj:
        csv_reader(f_obj)
Добавлено через 5 минут
vic5710, Спасибо за помощь!
У меня ещё вопрос, вот мы выводим список числовых значений, допустим получаем три дробных вещественных числа.

Python
1
2
3
    for row in reader:
        s = " ".join(row)
        list_numbers = s.split(';')[1]
Bash
1
2
3
0.33312
0.867767
9.323123
А что, если нам нужно первое значение вывести, второе пропустить, третье вывести.
Как это организовать в коде?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
18.10.2017, 07:04
можно через индексы
Python
1
2
3
for i in range(len(reader)):
    if i == 1:continue
    print(i,reader[i])
для вашего случая
Python
1
2
3
for row in reader:
    if i == 1: continue
    #...
1
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
20.10.2017, 18:18  [ТС]
vic5710, Сделал доступ к обработке xls с помощью com объекта.
С одним CSV файлом конвертация в XLS проходит успешно, всё ок. Данные в ячейки заполняются согласно условиям.
Но мы имеем уже два файла, с первого файла данные в ячейки помещаются согласно коду ниже, а при попытке записи от второго CSV данные перезатираются. Понятное дело что нужно писать условие для записи ячеек в XLS от второго файла CSV, но пока не получается это организовать в коде. Можно каким либо образом добавить условие, которое будет после прогона с одним CSV файлом переключаться на другой CSV файл и заполонять уже другие ячейки в XLS?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import csv
import win32com.client
from win32com.client import Dispatch
 
xls = "F:\Soft\My_Autotests\Python\!Tests\Other\CSV\original_oas_ods_ac.%product%.xls"
csv_1 = r'F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Product1\Report1.csv'
csv_2 = r'F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Product2\Report2.csv'
 
def csv_reader(file_obj):
    ### Read a csv file ###
    reader = csv.reader(file_obj, delimiter=' ', quotechar='|')
    ### Create a xls file ###
    Excel = win32com.client.Dispatch("Excel.Application")
    wb = Excel.Workbooks.Open(xls)
    sheet = wb.ActiveSheet
 
    iteration = 1
    for row in reader:
        s = " ".join(row)
        list_numbers = s.split(';')[1]
        for cell in[list_numbers]:
 
            if iteration <= 4:
                sheet.Cells(iteration+8, 2).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 4 and iteration <= 9:
                sheet.Cells(iteration+16, 2).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 9 and iteration <= 14:
                sheet.Cells(iteration+11, 3).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 14 and iteration <= 19:
                sheet.Cells(iteration+6, 4).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 19 and iteration <= 24:
                sheet.Cells(iteration+1, 5).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            else:
                sheet.Cells(iteration-4, 6).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            iteration += 1
 
    wb.Save()
    wb.Close()
    Excel.Quit()
 
### Detect csv path and open csv file ###
if __name__ == "__main__":
    path = [csv_1, csv_2]
    for i in path:
        #print(i)
        with open(i, "r") as f_obj:
                print("Данные по пути из файла '{}' отправляются в XLS формат.".format(i))
                csv_reader(f_obj)
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
20.10.2017, 18:50
Цитата Сообщение от NickMur Посмотреть сообщение
Можно каким либо образом добавить условие, которое будет после прогона с одним CSV файлом переключаться на другой CSV файл и заполнять уже другие ячейки в XLS?
да конечно можно, просто открываете другой csv файл и пишете в лист куда вам надо. открытие, сохранение и закрытие Excel делайте отдельно. сделайте свою функцию так примерно:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def csv_reader(file_obj,current_sheet):
    #....
 
   
 
Excel = win32com.client.Dispatch("Excel.Application")
wb = Excel.Workbooks.Open(xls)
sheet = wb.ActiveSheet
csv_reader(csv1,sheet)
csv_reader(csv2,sheet)
wb.Save()
wb.Close()
Excel.Quit()
0
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
20.10.2017, 20:44  [ТС]
vic5710, Спасибо! То есть сперва вызываем функцию с одним CSV файлом, потом вызываем эту же функцию но с другим CSV файлом? Я вас правильно понял?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
20.10.2017, 20:54
ну да. ваша ошибка в том что внутри ф-ции идет открытие и сохранение xls, соотв. все что было раньше затирается
1
1 / 1 / 1
Регистрация: 15.10.2013
Сообщений: 60
24.10.2017, 16:06  [ТС]
vic5710, Переделал, открывает каждый файл отдельно.
Но не пойму как вставить условие в условие, чтобы при открытии второго файла данные записывались в другую ячейку.
Пометил комментарием куда я хочу вставить условие.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import csv
import win32com.client
from win32com.client import Dispatch
 
xls = "F:\Soft\My_Autotests\Python\!Tests\Other\CSV\original_oas_ods_ac.%product%.xls"
csv_1 = r'F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Product1\Report1.csv'
csv_2 = r'F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Product2\Report2.csv'
 
Excel = win32com.client.Dispatch("Excel.Application")
wb = Excel.Workbooks.Open(xls)
sheet = wb.ActiveSheet
 
def csv_reader(file_obj, sheet):
    #### Read a csv file ###
    reader = csv.reader(file_obj, delimiter=' ', quotechar='|')
    #reader = csv.reader(file_obj, delimiter=' ', quotechar='|')
    #print(file_obj)
    #print(path[0] in csv_1)
 
 
    ### Create a xls file ###
    #Excel = win32com.client.Dispatch("Excel.Application")
    #wb = Excel.Workbooks.Open(xls)
    #sheet = wb.ActiveSheet
 
    iteration = 1
    for row in reader:
        s = " ".join(row)
        #print (s)
        list_numbers = s.split(';')[1]
[COLOR="Yellow"]        for cell in[list_numbers]:
 
            if iteration <= 4:
                sheet.Cells(iteration+8, 2).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass[/COLOR]
 
            elif iteration > 4 and iteration <= 9:
                sheet.Cells(iteration+16, 2).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 9 and iteration <= 14:
                sheet.Cells(iteration+11, 3).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 14 and iteration <= 19:
                sheet.Cells(iteration+6, 4).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            elif iteration > 19 and iteration <= 24:
                sheet.Cells(iteration+1, 5).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            else:
                sheet.Cells(iteration-4, 6).value = cell #(№string, №column)
                print(iteration, list_numbers)
                pass
 
            iteration += 1
 
### Detect 2 csv path and open 2 csv file ###
if __name__ == "__main__":
    path = [csv_1, csv_2]
    #for i in path:
        #print(i)
    with open(path[0], "r") as f_obj_1:
            print("Данные по пути из файла '{}' отправляются в XLS формат.".format(path[0]))
            csv_reader(f_obj_1,sheet)
    with open(path[1], "r") as f_obj_2:
            print("Данные по пути из файла '{}' отправляются в XLS формат.".format(path[1]))
            csv_reader(f_obj_2,sheet)
 
wb.Save()
wb.Close()
Excel.Quit()
Добавлено через 2 часа 58 минут
vic5710, Я разобрался, спасибо вам большое за помощь!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import csv
import win32com.client
from win32com.client import Dispatch
 
xls = "F:\Soft\My_Autotests\Python\!Tests\Other\CSV\original_oas_ods_ac.%product%.xls"
csv_1 = r'F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Product1\Report1.csv'
csv_2 = r'F:\Soft\My_Autotests\Python\!Tests\Other\CSV\Product2\Report2.csv'
 
Excel = win32com.client.Dispatch("Excel.Application")
wb = Excel.Workbooks.Open(xls)
sheet = wb.ActiveSheet
 
def csv_reader(file_obj, sheet): # Read a csv file
    reader = csv.reader(file_obj, delimiter=' ', quotechar='|')
 
    iteration = 1
    for row in reader:
        s = " ".join(row)
        list_numbers = s.split(';')[1]
        for cell in[list_numbers]:
 
            if i == path[0]:
                if iteration <= 4:
                    sheet.Cells(iteration+8, 2).value = cell #(№string, №column)
                if iteration > 4 and iteration <= 9:
                    sheet.Cells(iteration + 16, 2).value = cell  # (№string, №column)
                if iteration > 9 and iteration <= 14:
                    sheet.Cells(iteration + 11, 3).value = cell  # (№string, №column)
                if iteration > 14 and iteration <= 19:
                    sheet.Cells(iteration + 6, 4).value = cell  # (№string, №column)
                if iteration > 19 and iteration <= 24:
                    sheet.Cells(iteration + 1, 5).value = cell  # (№string, №column)
                if iteration > 24:
                    sheet.Cells(iteration - 4, 6).value = cell  # (№string, №column)
 
            if i == path[1]:
                if iteration <= 4:
                    sheet.Cells(iteration+8, 3).value = cell #(№string, №column)
                if iteration > 4 and iteration <= 9:
                    sheet.Cells(iteration + 30, 2).value = cell  # (№string, №column)
                if iteration > 9 and iteration <= 14:
                    sheet.Cells(iteration + 25, 3).value = cell  # (№string, №column)
                if iteration > 14 and iteration <= 19:
                    sheet.Cells(iteration + 20, 4).value = cell  # (№string, №column)
                if iteration > 19 and iteration <= 24:
                    sheet.Cells(iteration + 15, 5).value = cell  # (№string, №column)
                if iteration > 24:
                    sheet.Cells(iteration + 10, 6).value = cell  # (№string, №column)
 
            print(iteration, list_numbers)
            pass
 
            iteration += 1
 
if __name__ == "__main__": # Detect 2 csv path and open 2 csv file
    path = [csv_1, csv_2]
    for i in path:
        #print(i)
        with open(i, "r") as f_obj:
            print("Открываем CSV по пути '{}' и записываем данные в XLS формат.".format(i))
            csv_reader(f_obj,sheet)
wb.Save()
wb.Close()
Excel.Quit()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.10.2017, 16:06
Помогаю со студенческими работами здесь

Конвертация DBF в XLS
Всеем привет! Есть код на Python, который должен конвертировать файл базы данных .DBF в файл XLS: from xlwt import Workbook ...

Конвертация xls в pdf
Всем доброго времени суток! Нужна бесплатная библиотека для импорта pdf в excel. Если таковой нет, то может кто подсказать бесплатную...

Сохранение xls в csv
Здравствуйте. В общем просто руками сохранять в csv из xls я умею. Хочу узнать реально ли это автоматизировать. Т.е. у меня в...

Exel(csv) в xls
Необходимо из таблицы с данными, генерировать xml файл. Все готовые сервисы генерируют только: одна строка, одно значение. А мне...

Преобразование файла CSV в XLS
Уважаемые знатоки, обращаюсь к вам с проблемой, беспощадно точащей моё сознание уже 5-й день. Заранее оговорюсь, что буду благодарен...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера 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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru