Найти - Пользователи
Полная версия: Python удаление повторяющихся строк
Начало » Python для новичков » Python удаление повторяющихся строк
1 2
Syslik
Народ, знаю, что подобные вопросы разбирались, но то, что удалось найти не помогло. У меня есть скрипт, который берёт данные с сервака и записывает в файл. Проблема в том, что он не добавляет новые записи, а просто каждый раз записывает все имеющиеся данные по новой. К тому же сам файл приходится дозаполнять ручками. Пример:
Иванов 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()
py.user.next
Нужно загрузить сначала имена из файла, а потом брать с сервера имена и отбрасывать те, которые уже есть в загруженных из файла. То, что останется, сохранять в файл.
Syslik
Ммм… Не совсем ясно, из какого файла? То есть сравнивать записи существующего файла с результатом обращения к серверу и запись вести в ещё один файл?
py.user.next
В тот же самый файл вести запись. Файл можно как один раз открыть и читать из него и писать в него, так и несколько раз открывать то на чтение, то на запись.
Вместо a+ используй r+.
Syslik
Хм, поменяла код. Почему-то у меня не проходит 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()
JOHN_16
потому что вы удаляете переменную name, а не элемент словаря Dict
vic57
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]
Syslik
проблема в том, что скрипт у меня запускается каждый день, а поэтому в данном случае 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 (тут должен быть плачущий смайл, но я оставлю это (____|____))
vic57
в моем коде просто после строки ‘cc’ нет ‘ \n’ - перевод строки. Будьте внимательней
Убрать повторы :
 f = open('test.txt']
l = f.readlines()
f.close()
d = OrderedDict().fromkeys(l).keys()
for i in d: print i,


Syslik
Ничего не могу понять… Может, у меня что-то с файлом. Даже средства bash не помогают.
 $ sort -u old_file > new_file
иль
$ awk '!x++' old_file > new_file
Находит дубли, но НЕ УДАЛЯЕТ, просто выносит вниз.
В файле запись идёт так: \таб\имя\таб\_____\таб короче через табы всё. Как только их убираю - всё пашет. Это что за дела?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB