Найти - Пользователи
Полная версия: сравнение библиотек, состоящих из текстовых строк
Начало » Центр помощи » сравнение библиотек, состоящих из текстовых строк
1 2
murus
Доброго времени суток! помогите с задачкой на Питоне пожалуйста…
Суть задачи в том, что есть два текстовых файла, состоящие из нескольких строк (слова разделены пробелами и табуляциями, которые не являются словами, т.е. слово не может быть нулевой длины). Нужно написать скрипт, который сравнивает эти два файла независимо от порядка слов, и выводит сообщение что файлы либо идентичны (т.е. в них одни и те же слова), либо нет. в случае если они не идентичны, вывести те слова что есть в первом, и нет во втором… и те, которые есть во втором, но нет в первом.
Реализовать нужно не сравнением строк, а как массив… т.е. использовать библиотеки.
файлы которые нужно сравнить лежат тут http://files.mail.ru/1EFLEZ (там три возможных варианта, с учетом равенства или неравенства файлов.
начала писать код, дошла до вывода элементов словарей и тут же начались проблемы… выводит не по русски в в виде символов.

# -*- coding: utf-8 -*-
import os;
import codecs;

dict1 = {}
with open ('01.txt','r') as f:
for str in f:
dict1[str.rstrip()] = 1
print dict1

dict2 = {}
with open ('02.txt','r') as f:
for str in f:
dict2[str.rstrip()] = 1
print dict2
ну и дальнейший алгоритм как реализовать не представляю :((( видимо нужно использовать key но как сравнить каждое слово в строке каждой библиотеки? помогите плиз… :(
ZZZ
Посмотрите на множества – set.
murus
а без set это воплотить не реально? у меня не получается даже вывести по-русски словари… :(
я так поняла что нужно сравнивать каждую букву как элемент массива и искать пробелы как разделители слов… каким-то образом.
zheromo
s1 = set(open('01.txt').read().split())
s2 = set(open('02.txt').read().split())
if s1==s2:
print 'equal'
else:
print " ".join(s1-s2)
print " ".join(s2-s1)
murus
спасибо огромное!!! работает!
но все-таки вариант без использования set придется додумывать… будет громоздко конечно, но хотят чтобы не было встроенных функций… :(
zheromo
murus
хотят чтобы не было встроенных функций…
это не функция - это ТИП (type) данных
>>> `set`
"<type 'set'>"
>>> `map`
'<built-in function map>'
>>>
так это можно доказать :)
murus
попробую доказать))) хотя split и join это ведь уже функции (или методы)?

в общем хочется узнать как это можно сделать в том числе и простым перебором))
ZZZ
set не просто входит в стандартную библиотеку питона, но и является встроенным типом, так же как dict, list и прочие. Т.е. если нельзя юзать set, то либо должно быть прямое указание на то, что можно юзать, либо это полный бред, ибо эти типы равнозначны с точки зрения “чтобы не было встроенных функций”.
Griffon
join и split это не функции, а методы. Так что можешь не волноваться. :D
zheromo
тогда уже и open на 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