Appearance
question:какие есть аналоги библиотеке multiprocessing
answer:В Python есть несколько альтернативных библиотек `multiprocessing` для работы с многопроцессорностью. Некоторые из них включают: 1. `concurrent.futures`: Это встроенный модуль Python, который предоставляет высокоуровневый интерфейс для выполнения асинхронных операций. В нем есть класс `ProcessPoolExecutor`, который позволяет эффективно использовать все доступные ядра процессора. 2. `joblib`: Эта библиотека предоставляет простой интерфейс для распараллеливания вычислений в Python. Он поддерживает параллельную обработку как с использованием нескольких ядер процессора, так и с использованием нескольких узлов в сети. 3. `dask`: Это библиотека для параллельных вычислений в Python. Он позволяет эффективно работать с большими массивами данных и выполнять распределенные вычисления. `dask` также может использовать все доступные ядра процессора для распараллеливания вычислений. 4. `ray`: Это быстроразвивающаяся библиотека для распределенных приложений и машинного обучения. Она предоставляет набор удобных инструментов для распределенных вычислений, включая возможность использовать все доступные ядра процессора. В зависимости от ваших потребностей и конкретных задач, эти альтернативы могут предоставить различные функции и возможности для работы с многопроцессорностью в Python.
question:перепиши код используя concurrent.futures filename = "eda.txt" print('Загрузка...n') with open(filename, 'r', encoding="utf-8") as file: all_lines = file.read() lines = str(all_lines).split('n') while True: inp = input('Поиск:') found = False for line in lines: if inp.lower() in line.lower(): line_exp = line.split('#') print('Имя: ',line_exp[0]) print('Телефон: ',line_exp[1]) print('Адрес: ',line_exp[2]) print('Прочее: ',line_exp[3]) print('GPS: ',line_exp[4]) print('OS: ',line_exp[5]) print("-" * 30) found = True if not found: print('Ничего не найдено!')
answer:Вот переписанный код с использованием `concurrent.futures`: ```python import concurrent.futures def search_in_line(line): if inp.lower() in line.lower(): line_exp = line.split('#') print('Имя: ', line_exp[0]) print('Телефон: ', line_exp[1]) print('Адрес: ', line_exp[2]) print('Прочее: ', line_exp[3]) print('GPS: ', line_exp[4]) print('OS: ', line_exp[5]) print("-" * 30) return True return False def search(lines, inp): found = False with concurrent.futures.ThreadPoolExecutor() as executor: results = executor.map(search_in_line, lines) for result in results: if result: found = True return found filename = "eda.txt" print('Загрузка...n') with open(filename, 'r', encoding="utf-8") as file: all_lines = file.read() lines = str(all_lines).split('n') while True: inp = input('Поиск:') found = search(lines, inp) if not found: print('Ничего не найдено!') ``` Была создана функция `search_in_line`, которая выполняет поиск в строке и возвращает `True`, если строка содержит введенное значение, иначе возвращает `False`. Функция `search` использует `ThreadPoolExecutor` из `concurrent.futures`, чтобы параллельно выполнять поиск во всех строках. Результаты каждой строки сохраняются в виде генератора и затем обрабатываются в цикле для вывода найденных данных.
question:with open(filename, 'r', encoding="utf-8") as file: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FileNotFoundError: [Errno 2] No such file or directory: '0 (1).csv' import os folder_path = "gibdd_full/" files = os.listdir(folder_path) for filename in files: print('Загрузка...',filename) with open(filename, 'r', encoding="utf-8") as file: all_lines = file.read() lines = str(all_lines).split('n') while True: inp = input('Поиск:') found = False for line in lines: if inp.lower() in line.lower(): print(line) print("-" * 30) found = True if not found: print('Ничего не найдено!')
answer:Проблема возникает, потому что при открытии файла в строке `with open(filename, 'r', encoding="utf-8") as file:` используется только имя файла без пути к нему. Это приводит к ошибке `FileNotFoundError`. Чтобы исправить это, нужно указать полный путь к файлу, объединив путь к папке `gibdd_full/` с именем файла: ```python import os folder_path = "gibdd_full/" files = os.listdir(folder_path) for filename in files: file_path = os.path.join(folder_path, filename) print('Загрузка...', filename) with open(file_path, 'r', encoding="utf-8") as file: all_lines = file.read() lines = str(all_lines).split('n') while True: inp = input('Поиск:') found = False for line in lines: if inp.lower() in line.lower(): print(line) print("-" * 30) found = True if not found: print('Ничего не найдено!') ``` Этот код будет открывать и обрабатывать каждый файл по пути `gibdd_full/имя_файла.csv`.
question:нужно прочитать все файлы , добавить их содержимое в список и разбить по переносу строки, этот код правильный? import os folder_path = "gibdd_full/" files = os.listdir(folder_path) l = [] for filename in files: print('Загрузка...',filename) file_path = os.path.join(folder_path, filename) with open(file_path, 'r', encoding="utf-8") as file: all_lines = file.read() l.append(all_lines) lines = str(l).split('n')
answer:Ваш код будет работать, однако есть некоторые поправки, которые следует внести. 1. Необходимо объединить строки из разных файлов в одну строку, чтобы обрабатывать их как одно целое. Вместо `l.append(all_lines)` вы можете использовать `l.extend(all_lines.split("n"))`, чтобы добавить каждую строку из файла в список `l`. 2. Когда вы преобразуете список `l` в строку с помощью `str(l)`, это приведет к форматированию строки, включая квадратные скобки и запятые между элементами списка. Вместо этого можно просто использовать метод `join()` для объединения всех строк в одну строку. Исправленный код будет выглядеть следующим образом: ```python import os folder_path = "gibdd_full/" files = os.listdir(folder_path) l = [] for filename in files: print('Загрузка...', filename) file_path = os.path.join(folder_path, filename) with open(file_path, 'r', encoding="utf-8") as file: all_lines = file.read() l.extend(all_lines.split("n")) lines = "n".join(l) ``` Теперь все содержимое из всех файлов будет добавлено в список `l` и разделено по переносу строки. Затем этот список объединяется обратно в одну строку с помощью `join()`, и результат сохраняется в переменную `lines`.