Создайте таблицу в базе данных SQL следующим образом:
create table properties (
file_name varchar(100) not null, -- Or whatever sizes make sense
prop_name varchar(100) not null,
prop_value varchar(100) not null
)
Затем проанализируйте ваши файлы с помощью простых регулярных выражений или даже просто split
:
prop_name, prop_value = line.strip.split('=')
сбросьте проанализированные данные в вашу таблицу и сделайте немного SQL, чтобы найти свойства, общие для всех файлов:
select prop_name, prop_value
from properties
group by prop_name, prop_value
having count(*) = $n
Где $n
заменяется количеством входных файлов. Теперь у вас есть список всех общих свойств и их значений, поэтому запишите их в новый файл, удалите их из таблицы properties
, затем прокрутите все строки, оставшиеся в properties
, и запишите их в соответствующие файлы (то есть файл с именем в столбце file_name
).
Вы говорите, что файлы "огромные", так что вы, вероятно, не хотите, чтобы все они одновременно хранились в памяти. Вы могли бы сделать несколько проходов и использовать библиотеку хэширования на диске для отслеживания того, что было замечено и где, но это было бы пустой тратой времени, если у вас есть база данных SQL, и у каждого должен быть, по крайней мере, SQLite, работающий вокруг , SQL и базы данных предназначены для управления большими объемами структурированных данных.