Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 15, 2016 17:05:43

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

Народ, знаю, что подобные вопросы разбирались, но то, что удалось найти не помогло. У меня есть скрипт, который берёт данные с сервака и записывает в файл. Проблема в том, что он не добавляет новые записи, а просто каждый раз записывает все имеющиеся данные по новой. К тому же сам файл приходится дозаполнять ручками. Пример:
Иванов 2334345
Петров 6888998
Цифры забиваются руками. После выполнения скрипта хотелось бы иметь резутьтат:
Иванов 2334345
Петров 6888998
Сидоров
А получается:
Иванов 2334345
Петров 6888998
Иванов
Петров
Сидоров
Как поправить код, чтоб он сравнивал содержимое строк, например, до второго таба, и удалял дубли? Много модификаций делала, код просто игнорится. Вот последнее “творение”:

 f=open("test.txt", "a+")
for r in res:
  m=r[1]['uid'][0]
  f.write('*\t' + m + '\n')
lines=open("test.txt", "r").readlines()
array = []
for i in range(len(lines)):
  if array.count(lines[i]) != 0:
    del lines[i]
f.close()

Офлайн

#2 Сен. 16, 2016 12:30:09

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

Нужно загрузить сначала имена из файла, а потом брать с сервера имена и отбрасывать те, которые уже есть в загруженных из файла. То, что останется, сохранять в файл.



Офлайн

#3 Сен. 16, 2016 14:37:12

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

Ммм… Не совсем ясно, из какого файла? То есть сравнивать записи существующего файла с результатом обращения к серверу и запись вести в ещё один файл?

Офлайн

#4 Сен. 17, 2016 01:09:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

В тот же самый файл вести запись. Файл можно как один раз открыть и читать из него и писать в него, так и несколько раз открывать то на чтение, то на запись.
Вместо a+ используй r+.



Отредактировано py.user.next (Сен. 17, 2016 01:10:08)

Офлайн

#5 Окт. 5, 2016 16:59:40

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

Хм, поменяла код. Почему-то у меня не проходит del - в смысле он ничего не удаляет

 open_file = open('test.txt', 'r')
line = open_file.readline()
name = line.strip()
Dict = {}
def find_duplicate():
    for name in open_file:
        if Dict.has_key(name):
            Dict[name] += 1
        else:
            Dict[name] = 1
find_duplicate()
for name in Dict:
    if Dict[name] > 1:
        del name
open_file.close()

Офлайн

#6 Окт. 5, 2016 17:56:26

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

потому что вы удаляете переменную name, а не элемент словаря Dict



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#7 Окт. 5, 2016 22:46:13

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Python удаление повторяющихся строк

Syslik
задача ваша ИМХО для sqlite - перезаписью файлов потеряете данные
ну если по простому

 from collections import OrderedDict
f = open('test.txt','w+') 
f.write('aa 123\n') 
f.write('aa\n') 
f.write('bb\n')
f.write('bb 234\n')
f.write('cc')
f.close() 
f = open('test.txt') 
d = OrderedDict()
lines = f.readlines() 
f.close()
for line in lines:
    l = line.strip().split()
    if len(l) > 1: d[l[0]] = l[1] 
    elif not l[0] in d: d[l[0]] = ''
for i in d:
    print i, d[i]

Отредактировано vic57 (Окт. 6, 2016 18:06:52)

Офлайн

#8 Окт. 10, 2016 14:38:18

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

проблема в том, что скрипт у меня запускается каждый день, а поэтому в данном случае 1:
aa 123
bb 234
cc
2:
aa 123
bb 234
ccaa 123
cc
Ерундень какая-то. Хорошо, пусть в файл запись вместе с дублями идёт. Как потом отдельно открыть его и убрать повторы?
пыталась вместо del name вставить del Dict - or name in Dict:
RuntimeError: dictionary changed size during iteration (тут должен быть плачущий смайл, но я оставлю это (____|____))

Офлайн

#9 Окт. 10, 2016 15:08:34

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Python удаление повторяющихся строк

в моем коде просто после строки ‘cc’ нет ‘ \n’ - перевод строки. Будьте внимательней
Убрать повторы :

 f = open('test.txt']
l = f.readlines()
f.close()
d = OrderedDict().fromkeys(l).keys()
for i in d: print i,


Отредактировано vic57 (Окт. 10, 2016 20:28:47)

Офлайн

#10 Окт. 13, 2016 09:09:14

Syslik
Зарегистрирован: 2016-09-15
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Python удаление повторяющихся строк

Ничего не могу понять… Может, у меня что-то с файлом. Даже средства bash не помогают.

 $ sort -u old_file > new_file
иль
$ awk '!x++' old_file > new_file
Находит дубли, но НЕ УДАЛЯЕТ, просто выносит вниз.
В файле запись идёт так: \таб\имя\таб\_____\таб короче через табы всё. Как только их убираю - всё пашет. Это что за дела?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version