Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2

Как удалить дубликаты повторяющихся ID в файле и пересохранить?

22.11.2023, 19:39. Показов 1329. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решила попробовать распарсить группу вконтакте. Нашла информацию как это сделать. Есть вполне рабочий вариант.
https://qna.habr.com/q/1282990
Python
1
2
3
4
5
6
7
8
9
10
11
12
count = m['members_count']
 
for i in range(0,count+1,1000):
    response_for_getMembers = requests.get('https://api.vk.com/method/groups.getMembers',
                            params={
                                'access_token':token,
                                'v': version,
                                'group_id': group_id,
                                'count': 1000,
                                'offset': i
    })
    members_list.extend(“формируем массив”)
Параметр count = m['members_count']
Это количество участников в группе. В итоге как бы я не парсила, если даже так прописать “for i in range(0,count,1000) (без единицы в count)” всегда создаются дубликаты. Количество дубликатов 1000 это я проверила функцией на JS.
JavaScript
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
async function LoadFromFile(FileName)
     {
         let contentResponse = await fetch(FileName);
        
         let text = await contentResponse.json();
         
        
         var totalRemoved = 0;
         var removed = { };
         var result = [];
         
         var myArray = text;
         
          for (var i = 0; i < myArray.length; i++) {
                if (result.indexOf(myArray[i]) < 0) {
                    result.push(myArray[i]);
                    continue;
                }
               
                removed[myArray[i]] == undefined?removed[myArray[i]] = 1:removed[myArray[i]]++;
                totalRemoved++;
            }
            
          console.log("Всего удалено " + totalRemoved + " элемента:");
          for (var j in removed) console.log(j + " - " + removed[j]);
          console.log("Исходный массив перед очисткой:\r\n", myArray);
          console.log("Исходный массив после очистки:\r\n", result);
         
     }
 
 
 
$(document).on('click','#id1', function(event){
  LoadFromFile("file.txt");
});
На JavaScript я знаю как написать, а вот как это сделать на Python, т.е. почистить файл от дубликатов ID и сохранить, например.
Python
1
2
3
 with open('file.txt', 'w') as fw:
          # записываем
          json.dump(members_list, fw)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.11.2023, 19:39
Ответы с готовыми решениями:

Как в текстовом файле удалить все дубликаты?
Дан файл со списком e-mail адресов. Найти дубликаты и привести все адреса к нижнему регистру. Помогите кому не сложно(

Определить число повторяющихся символов в дереве и удалить дубликаты
Помогите, пожалуйста, решить сие: Задание: Построить дерево поиска с элементами – символами. Определить число повторяющихся символов в...

Как удалить дубликаты элементов в XML-файле без помощи LINQ?
как удалить дубликаты элементов XML? ГЛАВНОЕ не при помощи LINQ &lt;aaa test=&quot;bbb&quot;/&gt;&lt;aaa test=&quot;bbb&quot;/&gt;&lt;bbb...

20
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,688
Записей в блоге: 29
22.11.2023, 19:43
Olga28, я не знаю что там в ответе приходит но подозреваю что жсон, парсим его сразу и закидываем в сет, так как сеты не допускают повторов, то все будет ок.
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
22.11.2023, 19:50  [ТС]
Welemir1, что такое сет, пример функции?
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,688
Записей в блоге: 29
22.11.2023, 20:17
Olga28, сет -это множество, не верю что в джаваскрипте такого нет, неупорядоченная структура данных которая хранит только уникальные элементы

Python
1
2
3
4
>>> a_list = [1,2,2,2,3,1]
>>> a_set=set(a_list)
>>> a_set
{1, 2, 3}
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
22.11.2023, 20:34  [ТС]
Welemir1, через set не получается сохранить в Json.
Python
1
2
3
4
5
a_set=set(members_list)
 
with open('file.txt', 'w') as fw:
          # записываем
          json.dump(a_set, fw)
Выдает ошибку. TypeError: Object of type 'set' is not JSON serializable
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
22.11.2023, 20:47
Цитата Сообщение от Olga28 Посмотреть сообщение
через set не получается сохранить в Json.
set нужен для удаления дубликатов... конвертируйте его в нужную структуру, которую можно сериализовать в json.
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
22.11.2023, 21:23  [ТС]
YuS_2, вообщем нашла вариант как это преобразовать.
Python
1
2
3
4
5
6
7
8
9
a_set=set(members_list)
        
        
        json_data = json.dumps(list(a_set))
        
       
        with open('file3.txt', 'w') as fw:
          # записываем
          json.dump(json_data, fw)
Только меня смущают кавычки которые почему-то добавились в след за массивом в текстовый файл. Теперь в txt
такие данные.
"[1, 2, 3, 4, 5]"
Как убрать кавычки в txt?
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
22.11.2023, 22:04
Цитата Сообщение от Olga28 Посмотреть сообщение
Как убрать кавычки в txt?
Python
1
','.join(map(str,a_set))
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
22.11.2023, 22:23  [ТС]
YuS_2,
Python
1
','.join(map(str,a_set))
Что-то я не могу понять, куда это прирастить можно, пожалуйста, с моим примером показать?
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
23.11.2023, 11:02
Olga28, начать, пожалуй, надо с этого:
Цитата Сообщение от Olga28 Посмотреть сообщение
range(0,count+1,1000)
Здесь у Вас, что? Учитывая:
range(start, stop, step=1)

Далее:
Цитата Сообщение от Olga28 Посмотреть сообщение
куда это прирастить можно
Да куда хочется... но правильнее, сделать так:
сериализация данных:
Python
1
2
3
4
5
6
7
8
import json
a = [1,2,3,4,4,4,4]
a_set = set(a) #убираем дубли
data = []
data.append(list(a_set))
data.append(','.join(map(str,a_set)))
with open('data.json', 'w') as fw:
    json.dump(data, fw)
и десериализация:
Python
1
2
3
import json
with open('data.json', 'r') as fr:
    data = json.load(fr)
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,688
Записей в блоге: 29
23.11.2023, 12:06
Olga28, чет ты странное делаешь
убери цикл, выполни код ниже и результат сюда
Python
1
2
3
4
5
6
7
8
9
10
response_for_getMembers = requests.get('https://api.vk.com/method/groups.getMembers',
                            params={
                                'access_token':token,
                                'v': version,
                                'group_id': group_id,
                                'count': 10,
                                'offset': 0
    })
print(response_for_getMembers)
print(type(response_for_getMembers))
0
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
23.11.2023, 12:30
Цитата Сообщение от Olga28 Посмотреть сообщение
через set не получается сохранить в Json
JavaScript
1
const result = [...new Set(myArray)]
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
23.11.2023, 12:55  [ТС]
Теперь кавычки внутри стали появляться когда я выполняю этот код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
....
        a_set=set(members_list)
        
        data = []
        #data.append(list(a_set))
        data.append(','.join(map(str,a_set)))
        
        
        #json_data = json.dumps(list(a_set))
        #json_data = json.dumps(','.join(map(str,a_set)))
       
        with open('file1.txt', 'w') as fw:
          # записываем
          json.dump(data, fw)
.....
Скриншот.
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
23.11.2023, 13:24
Цитата Сообщение от Olga28 Посмотреть сообщение
кавычки внутри стали появляться когда я выполняю этот код
Всё верно, там ведь строка.
используйте:
Цитата Сообщение от Olga28 Посмотреть сообщение
data.append(list(a_set))
ну или напрямую:
Python
1
data = list(a_set)
лишних преобразований:
Цитата Сообщение от Olga28 Посмотреть сообщение
json_data = json.dumps(list(a_set))
- не надо выполнять, чтобы кавычки не появлялись...
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
23.11.2023, 14:27  [ТС]
YuS_2, буду пытаться переписать функцию JS на python ваш вариант не работает. Файл становится в 2 раза больше, т.е. дублируется.
1. Вариант без кавычек
2. Второй массив добавляется с кавычками.

Вот стык где происходит добавление дубликата.

А вот код который я пытаясь реализовать.
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
....
a_set=set(members_list)
        
        data = []
        
        data = list(a_set)
 
        #data.append(list(a_set))
        data.append(','.join(map(str,a_set)))
        
        #removed = { }
        
        #result = []
        #totalRemoved = 0
        
        
        #for i in range(len(members_list)):
        #  if result.index(members_list[i]) < 0:
        #    result.append(item)
        #  totalRemoved += 1
          
        
        #json_data = json.dumps(list(a_set))
        #json_data = json.dumps(','.join(map(str,a_set)))
       
        with open('file19.txt', 'w') as fw:
          # записываем
          json.dump(data, fw)
....
Пускай я сделаю "велосипед", по крайне мере он будет работать. Придется почитать про синтаксис Python и функции. До сих пор есть некоторые вопросы.
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
23.11.2023, 15:56
offset - это как срез
Допустим в группе 2500 участников
count - сколько надо выгрузить за 1 раз, максимальное кол-во за 1 раз можно выгрузить 1000 (нужно смотреть доку)
С каждой итерацией offset должен увеличиваться на count

Python
1
2
3
4
5
6
7
8
9
import math
 
all_members = 2500
count = 1000
offset = 0
iters = math.ceil(all_members/count)
for _ in range(0, iters):
    print(offset)
    offset +=count
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
23.11.2023, 16:35
Цитата Сообщение от Olga28 Посмотреть сообщение
ваш вариант не работает. Файл становится в 2 раза больше, т.е. дублируется.
Хмм, я думал, Вам только подсказка нужна была...

Python
1
2
3
4
a_set = set(members_list)
data = list(a_set)
with open('file19.txt', 'w') as fw:
    json.dump(data, fw)
Добавлено через 3 минуты
Цитата Сообщение от Olga28 Посмотреть сообщение
Придется почитать про синтаксис Python и функции.
Если есть необходимость в питоне, в любом случае, придется читать... и не только о функциях...
0
150 / 120 / 36
Регистрация: 01.11.2019
Сообщений: 425
23.11.2023, 17:14
Вспомнил, была такая у меня проблема, надо меньше 1000 выгружать за раз, попробуй по 900 со смещением на 1 (offset = 0 , 901, 1802, ....)
0
383 / 23 / 2
Регистрация: 12.06.2021
Сообщений: 211
Записей в блоге: 2
23.11.2023, 17:28  [ТС]
Мне удалось сделать удаление дубликатов, но на строке 23 он не может записать массив removed. Выдает ошибку
File "main.py", line 23, in <module>
IndexError: list assignment index out of range
Оказывается пустые массивы записывать нельзя в Python(это не JS) и как это исправить?
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
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
 
totalRemoved = 0
 
listOfNumbers = [12, 42, 44, 68, 91, 72, 71, 81, 82, 12]
removed = []
# else -1
result = []
print(len(listOfNumbers))
for i in range(len(listOfNumbers)):
  try:
    print(result.index(listOfNumbers[i]))
  except:
    result.append(listOfNumbers[i]);
    continue
   
  
  try:
    removed[listOfNumbers[i]] += 1 
   # print(result.index(listOfNumbers[i]))
  except:
    removed[listOfNumbers[i]] = 1
  #  result.append(listOfNumbers[i]);
   # print('List does not have this element')
  totalRemoved += 1
 
 
#print('Всего удалено ' + totalRemoved + ' элемента:')
#for j in range(len(removed)):
#  print(j + " - " + removed[j]);
 
 
#print("Исходный массив перед очисткой:\r\n", listOfNumbers)
#print("Исходный массив после очистки:\r\n", result)
0
Любознательный
 Аватар для YuS_2
7405 / 2255 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
23.11.2023, 18:06
Цитата Сообщение от Olga28 Посмотреть сообщение
Мне удалось сделать удаление дубликатов
А подсказки опять не работают?

Цитата Сообщение от Olga28 Посмотреть сообщение
пустые массивы записывать нельзя в Python
чойта?

Цитата Сообщение от Olga28 Посмотреть сообщение
как это исправить?
исправить что?

Цитата Сообщение от Olga28 Посмотреть сообщение
Python
1
2
3
4
5
6
7
8
  try:
    removed[listOfNumbers[i]] += 1 
   # print(result.index(listOfNumbers[i]))
  except:
    removed[listOfNumbers[i]] = 1
  #  result.append(listOfNumbers[i]);
   # print('List does not have this element')
  totalRemoved += 1
опишите словами, что пытались тут сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.11.2023, 18:06
Помогаю со студенческими работами здесь

Удалить дубликаты в файле csv (notepad++)
Здравствуйте! В программе Notepad++ Есть файл csv, он хоть и длинный, но я приведу коротким пример. Нужно удалить дубликаты, но...

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

Как удалить дубликаты в бд
Есть таблица time в ней поля name и status. в поле name встречаются дубликаты как их можно удалить что бы остались только уникальные поля...

Удаление повторяющихся (дубликаты) значений. VBA
Добрый день Уважаемые форумчане, Хочу спросить у вас помощи, возможно ли каким-либо образом упростить мой код. Что мне нужно...

Как удалить дубликаты из ListBox?
Нужно было написать событие, удаляющее из списка дубликаты. Сижу уже несколько дней непролазно за кодом, может уже очевидного не вижу. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера 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. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru