Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 01.11.2020
Сообщений: 3

Пересортировка CSV файла по датам

06.11.2020, 20:41. Показов 4296. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!
Столкнулся со следующей проблемой. Есть CSV файл вида:
14,01.01.2000,1
14,01.02.2000,11
14,01.03.2000,154
32,01.01.2000,41
32,01.02.2000,144
32,01.03.2000,112
52_k,01.01.2000,121
52_k,01.02.2000,114
52_k,01.03.2000,141
и так далее более 65000 строк.

Необходимо привести его к виду и сохранить в другой CSV файл:
date,14,32,52_k
01.01.2000,1,41,121
01.02.2000,11,144,114
01.03.2000,154,112,141

Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.11.2020, 20:41
Ответы с готовыми решениями:

Вам доступен csv файл data.csv, содержащий информацию в csv формате.Напишите функцию read_csv для чтения данных из файла
Вам доступен CSV-файл data.csv, содержащий информацию в csv формате. Напишите функцию read_csv для чтения данных из этого файла. Она должна...

Пересортировка данных по датам
Помогите, не могу придумать как сделать. Есть даты по возростанию, но с пропусками некоторых дат и иногда повторяющиеся, каждой дате...

Как записать в один столбец из одного файла csv в csv
Всем привет Работает, но не получается, как нужно def take_first_n_rows_to_file(): with...

5
5042 / 1069 / 149
Регистрация: 29.01.2013
Сообщений: 6,248
06.11.2020, 21:14
Alex2342, а в чём у вас сложность?
0
0 / 0 / 0
Регистрация: 01.11.2020
Сообщений: 3
06.11.2020, 21:36  [ТС]
Моя идея была в том, по len(row[0) определить количество элементов, которые в шапке.
Затем я определил количество дат (временной период)
Затем определил шаг, через который повторяется дата.
Затем пробегаться по файлу и, зная шаг, через который появляется та же дата (например 1, 4 и 7 строчки - это 01.01.2000), добавлять в пустой список значения row[-1]. Споткнулся на том, что один раз я прохожусь по всему исходному файлу и в пустой список я набираю все значения для первой даты, и встает проблема, как теперь вернуться в начало файла и начать очередной проход со следующей даты.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
14.11.2020, 01:04
проще перегнать csv в sqlite3, потом можете сортировать и делать выборку как угодно

Добавлено через 39 минут
или в json
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
import re
import json
s = '''
14,01.01.2000,1
14,01.02.2000,11
14,01.03.2000,154
32,01.01.2000,41
32,01.02.2000,144
32,01.03.2000,112
52_k,01.01.2000,121
52_k,01.02.2000,114
52_k,01.03.2000,141
'''
pattern = re.compile('\d{2}\.\d{2}\.\d{4}')
d = {}
for i in s.split('\n'):
    match = re.search(pattern,i)
    if match:
        key = match[0]
        if not key in d:
            d[key] = []
        t = re.sub(key,'',i)
        l = [ j for j in t.split(',') if j]
        for i in l:
            if not i in d[key]:
                d[key].append(i)
            
print(json.dumps(d))
Добавлено через 4 часа 25 минут
если формат фиксирован - я бы в sqlite перегнал
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
s = '''
14,01.01.2000,1
14,01.02.2000,11
14,01.03.2000,154
32,01.01.2000,41
32,01.02.2000,144
32,01.03.2000,112
52_k,01.01.2000,121
52_k,01.02.2000,114
52_k,01.03.2000,141
'''
import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('create table tbl(date text,idx text, value text)') 
for i in s.strip().split('\n'):
    idx, date, value = i.strip().split(',')
    cur.execute('insert into tbl values(?,?,?)',(date,idx,value,))
    conn.commit()
cur.execute('select * from tbl order by date')
for i in cur: print(*i)
Добавлено через 29 секунд
Bash
1
2
3
4
5
6
7
8
9
01.01.2000 14 1
01.01.2000 32 41
01.01.2000 52_k 121
01.02.2000 14 11
01.02.2000 32 144
01.02.2000 52_k 114
01.03.2000 14 154
01.03.2000 32 112
01.03.2000 52_k 141
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
14.11.2020, 11:49
выборку можно так сделать
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dates = []
cur.execute('select date from tbl')
for i in cur: 
    d = i[0]
    if not d in dates: dates.append(d)
 
idxs = []
cur.execute('select idx from tbl')
for i in cur: 
    idx = i[0]
    if not idx in idxs: idxs.append(idx)
 
out = []
for date in dates:
    t =[date]
    for idx in idxs:
        cur.execute('select value from tbl where date=? and idx=?',(date,idx,))
        for line in cur:
            t.append(line[0])
    out.append(t)
hdr =['date'] + idxs
print(hdr)
for i in out: print(i)
Bash
1
2
3
4
['date', '14', '32', '52_k']
['01.01.2000', '1', '41', '121']
['01.02.2000', '11', '144', '114']
['01.03.2000', '154', '112', '141']
Добавлено через 48 секунд
оптимизация на коленке
0
0 / 0 / 0
Регистрация: 01.11.2020
Сообщений: 3
13.02.2021, 09:09  [ТС]
Спасибо за ответ!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.02.2021, 09:09
Помогаю со студенческими работами здесь

Разбиение CSV файла на много csv файлов по разделителю
Здравствуйте, есть файл в который нужно разделить, но не ровно по 30 строк например, а по 25, 23, 27. Как это можно сделать?

Выбрать строки из файла Excel по датам
столкнулся с одной задачей, которую не могу понять как решить. Есть файл excel с двумя столбцами "A" и "B". И есть...

Выполнить код по датам из файла Excel
в файле excel в столбце С записаны даты в формате 02.06.2017 10:07:14. Подскажите пожалуйста как мне работать с каждой строкой за каждый...

Заархивировать 50000 файлов, сгруппировав их по датам в имени файла
Есть каталог, в который валится до 50000 файлов ежедневно. Их имя состоит из 20 символов, с 10й позиции в имени присутствует маска даты в...

Пересортировка TreeSet, TreeMap
Допустим есть коллекция TreeSet c элементами внутри и затем нужно ее пересортировать по новому какому-либо правилу. Какие это можно...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru