Сравнение файлов построчно
Есть код для сравнения файлов и поиска совпадений строк
fin = open("c:/SPISOK.txt", "r")
buf = fin.readlines()
for line in buf:
line2 = line.rstrip('\n')
with open('c:/FILE.txt', 'r') as file1:
with open(line2, 'r') as file2:
same = set(file1).intersection(file2)
same.discard('\n')
print line2
for line in same:
print line
FILE.txt - основной файл для сравнения SPISOK.txt -список файлов для сравнения
Как брать только 1000 строк для сравнения, из каждого файла списка файлов SPISOK.txt.
SPISOK.txt:
c:/1.txt
c:/2.txt
c:/3.txt
Строки FILE.txt трогать не нужно, а нужно все строки FILE.txt сравнить с каждым файлом (поочередно) из списка но брать только первые 1000 строк у этих файлов
Ответы (3 шт):
Как брать только 1000 строк для сравнения, каждого файла из списка файлов SPISOK.txt
если файлы не терабайтные, то лучше выкачать оба файла в 2 буфера, оставить в одном файле только 1000 строк и работать
если файлы огромные - то файл в котором нужно 1000 строк для сравнения выкачать в список, а с другим файлом уже работать напрямую
Не проверял, пишите, если обнаружите ошибки - поправлю
count = 1000 # сколько строк считывать
files_to_check = open('C:\\SPISOK.txt', 'r').readlines() # список файло
main_file = set(open('C:\\FILE.txt', 'r').readlines(count+1)) # читаем "главный" файл
for line in files_to_check:
file_name = line.rstip('\n')
same = main_file.intersection(open(file_name, 'r').readlines(count+1)) # совпадения
same.discard('\n')
print(file_name)
print(*same)
itertools.islice(it, n) обрезает любой итератор до длины n:
from itertools import islice
n = 1000
fin = open("c:/SPISOK.txt", "r")
buf = fin.readlines()
for line in buf:
line2 = line.rstrip('\n')
with open('c:/FILE.txt', 'r') as file1:
with open(line2, 'r') as file2:
same = set(file1).intersection(islice(file2, n))
same.discard('\n')
print line2
for line in same:
print line
Предыдущий вариант был максимально подогнан под исходный. Можно читать первый файл один раз. Должно быть быстрее и аккуратнее:
from itertools import islice
n = 1000
with open('c:/FILE.txt') as file1:
file1_set = set(file1)
file1_set.discard('\n')
for fname2 in open('c:/SPISOK.txt'):
fname2 = fname2.rstrip('\n')
with open(fname2) as file2:
print fname2
for line in file1_set.intersection(islice(file2, n)):
print line