Рубрики
Без рубрики

📂 Объединить общие слова двух файлов в Python, практикуйте обработку файлов

Привет, 😁 В этом руководстве вы научитесь выбрать слова из файлов, сравните их и меня … помечены учебником, Python, файлами, алгоритмами.

В этом руководстве вы научитесь выбирать слова из файлов, сравните их и объединяйте общие слова в новом файле.

Вы будете практиковать 🔁

  • Обработка файла в 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, путем клонирования репозитория или просто следуя ссылкам ниже.

text_one.txt text_two.txt.

В 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”