В этом руководстве вы научитесь выбирать слова из файлов, сравните их и объединяйте общие слова в новом файле.
Вы будете практиковать 🔁
- Обработка файла в Python
- Наборы в Python
- Использование функции для RE Использовать код
- Некоторые основы командной строки
Давайте начнем 🐍
Код: Помните, что весь код, показанный во время этих учебников, будет толкаться в GitHub.
Разработчик-роуд/слияние – общие слова
Программа объединить общие слова двух файлов в другие
Программа объединить общие слова двух файлов в другие
Прежде всего создать файл Python, я буду использовать длинное и описательное имя файла Merge.py
😆.
Давайте создадим этот файл с терминалом:
Примечание: Если вы используете Windows, ни одна из этих команд не запустится, поэтому просто сделайте все вещи с графическим интерфейсом, как файловый менеджер вашего редактора кода. Если вы используете Mac 🍎, или Linux 🐧 Будьте расслаблены и изучите терминал как можно лучше.
Помните, что Python в основном является языком программирования CLI, поэтому вы будете использовать много терминала, поэтому мой совет должен использовать терминал всякий раз, когда вы можете 😀
touch merge.py
Команда Touch создаст пустой файл Merge.py
в каталоге вы находитесь.
Теперь я собираюсь позвонить графическому редактору, от терминала 😱, в этом случае я буду использовать VSCode.
code ./
Помните, что в Unix (не бойся, это относится к ОС Unix, например, Linux и Mac), ./
Точка относится к текущему каталогу.
Теперь, когда у меня есть VSCode, установленная и идея, давайте начнем с кода.
Откройте файл в Python
Прежде всего, мы будем использовать некоторые текстовые файлы в этом руководстве, вы можете легко загрузить их на GitHub, путем клонирования репозитория или просто следуя ссылкам ниже.
В Python вы открываете файл с функцией, открыть
который занимает в качестве параметра путь файла.
Убедитесь, что вы загрузили текстовые файлы и введите Merge.py
подать следующий код.
file1 = open("text_one.txt)
Это создаст переменную file1
, который является объектом файла с режимом «чтения» (по умолчанию).
Если вы попытаетесь распечатать эту переменную, вы получите что-то подобное:
print(file1) # Result # <_io.TextIOWrapper name='text_one.txt' mode='r' encoding='UTF-8'>
Это потому, что эта переменная – это просто файл объекта текстового файла с именем «Text_One.txt»
Но будьте осторожно, если файл не существует, вы получите ошибку 😱.
file1 = open("text_oness.txt") # FileNotFoundError: [Errno 2] No such file or directory: 'text_oness.txt'
Поэтому каждый раз, когда мы работаем с файлами, мы должны использовать некоторые защитные программирования, чтобы избежать ошибки в случае Файл не существует
try: file1 = open("text_oness.txt") except FileNotFoundError: print("Sorry that file doesn't exist") exit()
Мы используем Выход ()
Функция, потому что если файл не существует, у нас не будет переменной работать, поэтому в этом случае мы прекратите выполнение.
Если вы хотите получить содержимое файла в Python, вы бы использовали {file_object} .read ()
Функция, что, как это название говорит, читайте для нас содержание этого файла.
print(file1.read()) # Results # Why should you learn to write programs? # Writing programs (or programming) is a very creative # and rewarding activity. MORE TEXT .....
Теперь, когда вы знаете, как открывать файлы, и прочитать их, вы должны быть в состоянии создать эту функциональность сравнения.
Сначала убедитесь, что мы можем открыть два файла.
try: file1 = open("text_one.txt") file2 = open("text_two.txt") except FileNotFoundError: print("Sorry that file doesn't exist") exit()
Теперь мы будем использовать содержимое файлов и мощность наборов, чтобы получить все слова каждого файла.
Наборы в Python
Набор в Python, является неупорядоченной структурой данных, с действительно особой характеристикой (среди прочего), она не позволяет повторными элементами 🤫.
Мы будем использовать их, чтобы иметь возможность получить слова без повторения.
Создание набора в Python
Чтобы создать набор в Python, мы будем использовать Установить ()
функция.
empty_set = set()
Набор против списка:
mylist = list("122333") myset = set("122333") print(mylist) print(myset) # List: # ['1', '2', '2', '3', '3', '3'] # Set # {'3', '2', '1'}
Как вы видите, список печатал все элементы по порядку, но набор только напечатал элементы, которые не были повторены и неупорядочены.
Получение слов файла
Мы собираемся повторять слова файла с помощью LOOP и добавить их в набор для каждого файла.
file1_words = set() file2_words = set() for word in file1.read().split(): file1_words.add(word.lower()) for word in file2.read().split(): file2_words.add(word.lower()) print(file1_words) print(file2_words)
Возможно, вышеуказанный код немного запутается, но давайте посмотрим на него быстро.
Сначала мы инициализируем, два набора, один для первого файла, то другой для второго файла.
Затем мы повторяемся с A для цикла, каждое слово файла, позвонив file1.read (). Split ()
Отказ
В этой части мы используем метод Читать ()
, это дает нам содержимое файла в виде строки, а затем мы используем метод строки Сплит ()
, что дает нам список слов в файле путем разделения строки в каждом пробеле.
Так что в основном мы итерация по поводу:
for word in list_of_words_of_the_file: code...
Тогда мы получаем слово, мы делаем его строчными, чтобы избежать повторения слов, и добавить его в file1_words
набор. Помните, что в наборе не могут быть повторяются элементы, если слово уже в комплекте, то он не будет добавлен.
Мы делаем то же самое для обоих файлов.
Запуск этого куска кода возвращает два набора со всеми словами обоих файлов.
Вызов
Но есть проблема И я бросаю вызов вам 🔥, чтобы решить это. Есть несколько слов, которые имеют специальную пунктуацию, например (на
и на
И ваша задача состоит в том, чтобы выяснить, как заменить все символы пунктуации, поэтому не будут повторяться слова, а со специальной пунктуацией.
Добраться до меня на Twitter или Instagram. Если вы достигнете этого.
Использование наборов для пересекающихся общих слов
Мы ищем общие слова в наборах, которые мы только что создали, и для этого мы будем использовать Пересечение Отказ
Да, что слово может выглядеть страшно, вероятно, вы видели это в математике, но не волнуйтесь. Пересечение – это просто общие части двух наборов.
Пересекающиеся элементы могут быть утомительными 🙄, поскольку с большинством структур данных вам придется повторять переменные, которые содержат элементы, сравните их выбирать те, которые повторяются и добавляют их в новую переменную.
Но с наборами в Python у нас есть специальная функция, которая делает все это для нас, {set1} .ernersection ({set2})
common_words = file1_words.intersection(file2_words) print(common_words)
Там есть, теперь мы можем получить доступ к общим словам двух файлов в одном вкладыке.
Написание файлов в Python
Письменные файлы в Python, не так сложно. Мы открываем файл в режиме записи с помощью Открыть («Файл/путь»,)
Отказ
Это позволяет нам писать в существующий файл или в том случае, если файл не существует, оно создает новый с определенным пути файла.
Итак, давайте откроем наш файл Merge.
merge_file = open("merge.txt", mode = "w") # code_here .... merge_file.close()
Помните, что каждый раз, когда мы открываем файл в режиме записи, мы должны закрыть его, после получения желаемых операций.
Теперь мы собираемся написать все общие слова для нового merge.txt
файл.
merge_file = open("merge.txt", mode = "w") for word in common_words: word = word + ", " merge_file.write(word) merge_file.close()
Нам нужно добавить строку запятой в конце каждого слова, поэтому мы можем различить слова в файле.
Если вы запустите этот код, вы получите желаемый результат.
try: file1 = open("text_one.txt") file2 = open("text_two.txt") except FileNotFoundError: print("Sorry that file doesn't exist") exit() file1_words = set() file2_words = set() for word in file1.read().split(): file1_words.add(word.lower()) for word in file2.read().split(): file2_words.add(word.lower()) common_words = file1_words.intersection(file2_words) merge_file = open("merge.txt", mode="w") for word in common_words: word = word + ", " merge_file.write(word) merge_file.close()
Если вы проверяете новый "Merge.txt"
файл, вы увидите все общие слова между файлом text_one.txt.
и text_two.txt.
Поздравляем 🎉, вы только что создали алгоритм слияния, а в базе алгоритма слияния (наверняка наверняка), – это то, как GIT работает, для сравнения файлов кода.
Но подождите минуту, этот код неуклюжий, и есть много частей, где мы повторили тот же процесс.
Итак, давайте используем силу функций, чтобы сделать наш код многоразовым и более обогащим кодом.
Сначала давайте сделаем функцию, чтобы открыть файл и обработать исключения. Эта функция примет 2 аргумента, первым будет путь к файлу, а второй необязательный аргумент с открытым режимом файла.
# Python function that handle exception while opening files def open_file(file_path, open_mode="r"): try: file_handler = open(file_path, mode=open_mode) except FileNotFoundError: print(f"Sorry the file {file_path} doesn't exist") exit() except ValueError: print(f"Sorry the file {file_path} can't be opened with mode {open_mode}") exit() return file_handler
Затем функция, которая позволит нам поймать слова файла.
def get_file_words(file_path): file_words = set() read_file = open_file(file_path) for word in read_file.read().split(): file_words.add(word.lower()) return file_words
Вот как вы можете заметить, мы берем в качестве параметра Путь файла, который мы собираемся получить слова, и получите обработчик файла через open_file ()
Функция, мы только что создали.
Наконец, давайте создадим функцию слияние
, который сделает операции по попаданию и пересеканию общих слов и написание этих слов в файле.
def merge(*filenames, merge_file="merge.txt"): list_of_file_words = [] for filename in filenames: file_words = get_file_words(filename) list_of_file_words.append(file_words) common_words = set.intersection(*list_of_file_words) merge_write_file = open_file(merge_file, "w") for word in common_words: word = word + ", " merge_write_file.write(word) merge_write_file.close()
Здесь мы используем силу * args
В функциях Python, которые позволяют нам передавать несколько файлов для функции функции, если мы хотим объединить более двух.
Вы можете заметить, что я использовал петлю для итерации по поводу * Имя файла
аргумент Это потому, что теперь мы можем получить любое количество имена файлов, и поэтому наш алгоритм слияния сейчас более мощный.
Уплотнение нашего кода в основной () функции
Как лучшая практика в Python, вы можете использовать Главная ()
Функция, которая позвонит и выполнит любую операцию, который делает ваш скрипт.
def main(): file1 = "text_one.txt" file2 = "text_two.txt" merge(file1, file2, merge_file = "main_merge.txt")
Эта основная функция вызывает функцию объединения и пройти в качестве параметров файловых переменных файлов и файлов. Также мы указали merge_file
Параметр, который сообщает функцию Merge, в которой он должен писать.
Но, как вы можете заметить, мы еще не называем никакой функции, поэтому давайте назовем основную функцию.
if __name__ == "__main__": main()
__name__
Переменная заслуживает другого поста в блоге, но в основном здесь вы говорите Python:
- Эй, чувак 🥸, если это файл Python, который вы выполняете из терминала, запустите
Главная ()
функция.
Таким образом, последний код этого крутого алгоритма это:
def open_file(file_path, open_mode="r"): try: file_handler = open(file_path, mode=open_mode) except FileNotFoundError: print(f"Sorry the file {file_path} doesn't exist") exit() except ValueError: print(f"Sorry the file {file_path} can't be opened with mode {open_mode}") exit() return file_handler def get_file_words(file_path): file_words = set() read_file = open_file(file_path) for word in read_file.read().split(): file_words.add(word.lower()) return file_words def merge(*filenames, merge_file="merge.txt"): list_of_file_words = [] for filename in filenames: file_words = get_file_words(filename) list_of_file_words.append(file_words) common_words = set.intersection(*list_of_file_words) merge_write_file = open_file(merge_file, "w") for word in common_words: word = word + ", " merge_write_file.write(word) merge_write_file.close() def main(): file1 = "text_one.txt" file2 = "text_two.txt" merge(file1, file2, merge_file="merge_main.txt") if __name__ == "__main__": main()
Выводы:
В этом руководстве вы практиковали:
- Обработка файла в Python
- Наборы и списки в Python
- Итерация для петлей
- Определение функции и использование
- Основная функция Python Лучшая практика
Если вы нашли любую ошибку в этом руководстве, не стесняйтесь связаться со мной, или сделайте запрос на тягу в Github repo.
Следуй за мной в Мой блог , Чтобы получить более удивительные учебные пособия, как этот. Пожалуйста, рассмотрите возможность поддержки меня на Ko-fi. Вы мне много помогаете на Продолжайте строить эти учебники!
Оригинал: “https://dev.to/developerroad/merge-common-words-of-two-files-in-python-practice-file-handling-2odd”