Unikalne linie z dwóch plików w języku Python
Napisał: Patryk Krawaczyński
Wczoraj w Hacks & Scripts Brak komentarzy. (artykuł nr 924, ilość słów: 381)
Powrównując różne dane w języku Python, ze względu na wydajność najlepiej użyć do tego zbiorów. Zbiory są zaimplementowane przy użyciu tablic mieszających. Za każdym razem, gdy dodajemy obiekt do zbioru, pozycja w pamięci obiektu zbioru jest określana przy użyciu funkcji skrótu obiektu, który ma zostać dodany. Podczas testowania przynależności obiektu, wszystko co należy zrobić, to sprawdzić, czy obiekt znajduje się na pozycji określonej przez jego funkcję skrótu (ang. hash) – dlatego szybkość tej operacji nie zależy od rozmiaru zestawu danych. W przypadku list jest odwrotnie – cała lista musi zostać przeszukana, co stanie się wolniejsze wraz ze wzrostem tej listy. Przykładem może być szukanie unikalnych linii występujących w pierwszym pliku w porównaniu z drugim plikiem:
#!/usr/bin/env python3 import argparse def uniq_lines(file1, file2, file3): try: with open(file1, 'r') as f1, open(file2, 'r') as f2, open(file3, 'w') as f3: file2_lines = set(line.strip() for line in f2) print(file2_lines) for line in f1: if line.strip() not in file2_lines: f3.write(line) except FileNotFoundError: print('Error: One of the files was not found.') except IOError: print('Error: An I/O error occurred while reading the files.') print(f'Unique lines from {file1} compared with {file2} written to {file3}.') if __name__ == "__main__": parser = argparse.ArgumentParser( prog='UniqLines.py', description='Compare two files and write unique lines to a third file.') parser.add_argument('file1', help='The first file.') parser.add_argument('file2', help='The second file.') parser.add_argument('file3', help='The third file to write unique lines to.') args = parser.parse_args() uniq_lines(args.file1, args.file2, args.file3)
Wszystkie unikalne linie zapisywane są do trzeciego pliku.
Poprzedni wpis Brak nowszych postów