Если места будет не хватать, то можно переносить файл с результатом на другой комп. Понятно, что указанный способ хорош для английского текста, а вот для кириллицы нужно шлифовать.
Также, можно ручками задавать диапазон и потихоньку продвигаться.
Вариант два. Для этого нужен будет mysql или что то подобное. Делаем там таблицу, с одним столбцом и делаем значения в этом поле уникальными. Дальше, построчно (но лучше пачками) заливаем строки. Теперь это уже проблема базы отслеживать дубликаты. Так как базу можно разместить на другой машине, проблема с доступным местом решается:)
Вариант три. Так как это линукс, то можно примонтировать файловую систему с другой машины, где есть достаточно свободного места.
Вариант четыре. Если ОЗУ достаточно, то можно рискнуть запустить прям сразу sort -u. Я буквально недавно сортировал файл размером около 800 мегабайт (да, это в 120 раз меньше, но все же) и он управился за минуту (на машине с i3, 8Gb ОЗУ) И думаю, что больше всего времени было потрачено на чтение/запись файла (да, там не ssd, а обычный диск).
Вариант шесть. Если текст в каждой строке разный, тогда можно придумать хэш функцию, которая будет кодировать в каждую строку в байт (даже подойдет обычная сумма, но нужно экспериментировать). Для одинаковый строк функция будет давать одинаковый хэш код. Но не наоборот (то есть, могут быть строки, которые имеют одинаковый код, но значения различны — называется коллизия). Теперь, пробегая по файлу, считаем для каждой строки хэш. Если он равен заданому, выписываем строку в отдельный файл. При правильном подходе, файл будет разделен на 200-256 кусков, то есть, по пол гига каждый. А эти куски можно уже и sort -u прогнать. В принципе, это очень похоже на первый способ, там просто хэш функция была простой — первые два-три символа строки.
UPD
Вначале не заметил, что там свободно 109 Гигов. Это сильно меняет все. Я вначале подумал, что всего 109 гигов и поэтому свободно только 2:)
Пользовательское руководство of Комплексные решения, File Manager Webix Docs
СтартКомплексные решенияFile Manager
Знакомимся с File Manager
Основной экран приложения можно визуально разделить на 3 части:
Левая часть
В левой части приложения находится основное дерево директорий. Отсюда вы можете просматривать свои папки или добавлять новые папки и файлы с помощью большой кнопки над деревом.
Правая часть
Справа показано содержимое вашей текущей папки. Здесь вы можете взаимодействовать с файлами через контекстное меню, переходить в другие директории и их родительские папки (через строку навигации сверху).
Двойной щелчок мыши вызывает различные действия в зависимости от типа файла, по которому вы щёлкаете:
- двойной щелчок по паке откроет её
- по текстовому файлу откроет редактор с этим файлом
- по файлу, который можно открыть в бразуере (pdf, аудио, видео, изображение) откроет файл в соседней вкладке
Если никаких действий над файлом произвести нельзя — файл будет загружен.
Вы также можете изменить режим просмотра правой части приложения.
Верхняя панель
На верхней панели вы найдёте следующие элементы:
- поисковую строку, которая поможет найти желаемые файлы
- кнопка превью для получения подробной информации о файлах
- кнопки для переключения режимов просмотра
Режимы просмотра
У File Manager есть 3 режима:
- Table
- Cards
В этом режиме контекстное меню файлов доступно по щелчку мыши по иконке с тремя точками (напротив имени файла) или с помощью привычного щелчка правой кнопки мыши по самому файлу.
- Total
В этом режиме вы можете открыть две разные папки и работать с ними одновременно, а также перетаскивать файлы из одной папки в другую.
Как добавлять файлы и папки
Существует два способа добавить файлы/папки в менеджер: создать новые или загрузить уже существующие.
Как создавать файлы/папки
Вы можете создать:
- текстовый файл
- папку
Как создать файл/папку:
1) Щёлкните по кнопке «Add New»
2) Из преложенных вам опций выберите нужную
3) Во всплывшем окне дайте имя файлу/папке.
Как загружать файлы
Вы можете загружать следующие типы файлов:
- Текстовые
- Аудио
- Видео
- Изображения
- Архивы
- Таблицы Excel
Убедитесь, что имя файла НЕ начинается с точки.
Как загрузить файл:
1) Щёлкните по кнопке «Add New»
2) Выберите опцию Upload file
3) Через диалоговое окно выберите файлы, которые хотите загрузить.
Вы также можете перетаскивать файлы с вашего компьютера прямо в File Manager.
To upload a folder, you should take the following steps:
1) Click on the «Add New» button.
2) Select the «Upload folder» option in the dropdown menu.
3) In the dialog window, choose the folder(s) you want to upload.
You can also drag-n-drop files and folders right into File Manager.
Предварительный просмотр файлов
В секции превью вы можете получить информацию о размере файла, его типе и пр.
Выберите файл, информацию о котором хотите получить, и щёлкните по кнопке «Preview» на верхней панели.
Как копировать и перемещать файлы и папки
Если вам необходимо переместить файлы/папки из одной директории в другую, следуйте инструкции ниже:
1) Выберите необходимые файлы и нажмите сочетание клавиш Ctrl + X или выберите опцию Cut в контекстом меню
2) Перейдите в папку, в которую хотите переместить файлы и нажмите Ctrl + V или выберите опцию Paste в контекстом меню.
Вы также можете перетаскивать файлы внутри File Manager.
Результат будет тем же.По аналогии с перетаскиванием файлов вы можете копировать их:
1) Выберите файлы/папки и нажмите сочетание клавиш Ctrl + C или выберите опцию Copy в контекстном меню;
2) Перейдите в папку, в которую хотите вставить файлы и нажмите Ctrl + V иил выберите опцию Paste в контекстном меню.
Обратите внимание, что если вы хотите скопировать/переместить более одного файла, то при выборе файлов вам необходимо удерживать клавишу Ctrl. Для выбора по области удерживайте Shift. Чтобы выбрать все файлы в текущей папке нажмите сочетание клавиш Ctrl + A.
Ознакомьтесь с полным списком горячих клавиш в File Manager.
Как искать файлы
С помощью поисковой строки на верхней панели можно найти необходимые вам файлы. Просто начните печатать имя файла/папки и File Manager найдёт нужные вам. С помощью сочетания клавиш Ctrl + F можно переместить фокус на поисковую строку.
С найденными файлами можно производить любые доступные действия, а также открыть их расположение через контекстное меню или выбрав файл и нажав Ctrl + Alt + O.
Как редактировать текстовые файлы
Чтобы отредактировать текстовый файл, щёлкните по нему два раза или выберите опцию Edit в контекстом меню этого файла. Файл откроется в специальном редакторе.
Чтобы сохранить изменения, нажмите Ctrl + S или щёлкните по кнопке «Save» в верхней части редактора.
Жёлтая лампочка на кнопке говорит о том, что в файле есть несохранённые изменения.
Как переименовать файл
Чтобы переименовать файл, откройте контекстное меню этого файла и выберите опцию «Rename». В появившемся окошке введите новое имя файла. Вы можете переименовывать один файл за раз.
Вы также можете переименовать файл, нажав Ctrl + R.
Как скачать файл
Чтобы скачать файл из File Manager, выберите опцию Download в контекстном меню файла или нажмите Ctrl + D:
Вы также можете скачать файл через панель превью
Как удалить файл
1) Выберите необходимые файлы/папки;
2) Откройте контекстное меню и выберите опцию «Delete»или нажмите клавишу Del/Backspace.
Все файлы будут удалены безвозвратно.
Горячие клавиши
Ниже вы найдёте список горячих клавиш в File Manager.
Глобальные
<<<<<<< HEAD
— Ctrl* + F — перемещает фокус на поисковую строку
—
- Ctrl* + F — move focus to the search bar
- Ctrl* + A — select all items in the current directory
- Ctrl* + D — download the selected file
- Ctrl* + Alt + O — open file location (e. g. from search results)
- Ctrl* + O — open the selected file in a new tab
- Ctrl* + C — copy the selected file(s) to the clipboard
- Ctrl* + X — cuts the elected file(s) to the clipboard
- Ctrl* + V — paste the content of the clipboard into the current location
- Ctrl* + R — rename the selected file
- Ctrl* + E — edit the selected text file
- Del / Backspace — delete the selected file(s)
- Tab — move focus among selectable items. In the Total mode it moves the focus between two parts. >>>>>>> master
Текстовый редактор
- Ctrl* + S — сохраняет изменения в редакторе
- Esc — закрывает редактор
Окно
- Enter — применяет изменения и закрывает окно
- Esc — закрывает окно без применения изменений
В среде MacOS используйте Command вместо *.
Для разработчиков
С помощью кастомизации можно создать свои горячие клавиши.
Наверх
python — Как открыть файл с помощью оператора open with
спросил
Изменено 3 года, 8 месяцев назад
Просмотрено 886 тысяч раз
Я ищу способ ввода и вывода файлов в Python. Я написал следующий код для чтения списка имен (по одному в строке) из файла в другой файл, проверяя имя на соответствие именам в файле и добавляя текст к вхождениям в файле. Код работает. Можно ли сделать лучше?
Я хотел использовать оператор с оператором open(...
как для входных, так и для выходных файлов, но не понимаю, как они могут находиться в одном блоке, что означает, что мне нужно хранить имена во временном месте. ,
def filter(txt, oldfile, newfile): '''\ Чтение списка имен из файла строка за строкой в выходной файл. Если строка начинается с определенного имени, вставьте строку текста после имени перед добавлением строки в выходной файл. ''' выходной файл = открыть (новый файл, 'w') с open(oldfile, 'r', encoding='utf-8') в качестве входящего файла: для строки в файле: если строка.startswith(txt): line = line[0:len(txt)] + ' - Действительно великий человек!\n' outfile.write(строка) выходной файл.close() return # Получу ли я что-нибудь, включив это? # введите имя, которое вы хотите проверить text = input('Пожалуйста, введите имя великого человека:') letsgo = фильтр (текст, 'Испанский', 'Испанский3')
- python
- файл
- python-3.x
- файл-io
- io
4
Python позволяет помещать несколько операторов open()
в один с
. Вы разделяете их запятыми. Тогда ваш код будет таким:
def filter(txt, oldfile, newfile): '''\ Чтение списка имен из файла строка за строкой в выходной файл. Если строка начинается с определенного имени, вставьте строку текста после имени перед добавлением строки в выходной файл. ''' с open(newfile, 'w') в качестве внешнего файла, open(oldfile, 'r', encoding='utf-8') в качестве входного файла: для строки в файле: если строка.startswith(txt): line = line[0:len(txt)] + ' - Действительно великий человек!\n' outfile.write(строка) # введите имя, которое вы хотите проверить text = input('Пожалуйста, введите имя великого человека:') letsgo = фильтр (текст, 'Испанский', 'Испанский3')
И нет, вы ничего не выиграете, поместив явный return
в конец вашей функции. Вы можете использовать return
для раннего выхода, но у вас это было в конце, и функция завершится без него. (Конечно, с функциями, которые возвращают значение, вы используете return
, чтобы указать возвращаемое значение. )
Использование нескольких элементов open()
с с
не поддерживалось в Python 2.5, когда оператор с
был введен или в Python 2.6, но поддерживается в Python 2.7 и Python 3.1 или новее.
http://docs.python.org/reference/compound_stmts.html#the-with-statement http://docs.python.org/release/3.1/reference/compound_stmts.html#the-with-statement
Если вы пишете код, который должен работать на Python 2.5, 2.6 или 3.0, вложите операторы в операторы
как другие ответы предлагали или использовали contextlib.nested
.
0
Используйте вложенные блоки, подобные этому,
с open(newfile, 'w') в качестве исходящего файла: с open(oldfile, 'r', encoding='utf-8') в качестве входящего файла: # ваша логика идет прямо здесь
Вы можете вкладывать свои блоки. Вот так:
с open(newfile, 'w') в качестве исходящего файла: с open(oldfile, 'r', encoding='utf-8') в качестве входящего файла: для строки в файле: если строка. startswith(txt): line = line[0:len(txt)] + ' - Действительно великий человек!\n' outfile.write(строка)
Это лучше, чем ваша версия, потому что вы гарантируете, что outfile
будет закрыт, даже если ваш код столкнется с исключениями. Очевидно, вы могли бы сделать это с помощью try/finally, но с
— правильный способ сделать это.
Или, как я только что узнал, вы можете иметь несколько менеджеров контекста в операторе with, как описано @steveha. Мне кажется, это лучший вариант, чем вложение.
И последний второстепенный вопрос: возвращение не имеет никакой реальной цели. Я бы удалил это.
0
Иногда вам может понадобиться открыть переменное количество файлов и обращаться с каждым из них одинаково, вы можете сделать это с помощью contextlib
из импорта contextlib ExitStack имена файлов = [файл1.txt, файл2.txt, файл3. txt] с open('outfile.txt', 'a') в качестве выходного файла: с ExitStack() в качестве стека: file_pointers = [stack.enter_context(open(file, 'r')) для файла в именах файлов] для fp в file_pointers: outfile.write(fp.read())
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
gcc — ld: сборка для macOS-x86_64, но попытка связать файл, созданный для macOS-x86_64
У меня есть странная проблема, когда создание/использование статической библиотеки работает на моей виртуальной машине Ubuntu, но не на macOS:
ld: предупреждение : игнорирование файла . /dist/libXXXX.a, сборка для macOS-x86_64, но попытка связать файл, созданный для macOS-x86_64
Команда для создания статической библиотеки:
ar rcs libtest.a obj1.o obj2.o ...
Вызов компилятора:
gcc -g -Wall -Wextra main.c -L./dist -lXXXX -o main
Поиск в Google не дал никаких полезных результатов, за исключением этого (возможно) связанного вопроса о SO:
Возможный связанный вопрос
Проблема была решена, когда я напрямую поместил эти объектные файлы, а не собирал их в статическую библиотеку, то есть, gcc -g -Wall -Wextra main.c obj1.o obj2.o -o main
После этого я получил много предупреждений, таких как ld: предупреждение: объектный файл (obj1.o) был создан для более новой версии macOS ( 11.0), чем быть связанным (10.14)
, но это предупреждение, и объект связан, так что проблема решена.
Основная причина в том, что какая-то библиотека передает -mmacosx-version-min=10. 14
в gcc, поэтому объектный файл создан для 10.14, но мой macos теперь 11.0.
Если вы хотите, чтобы все заработало, попробуйте напрямую использовать объектные файлы, а не создавать статическую библиотеку .
Если вы хотите устранить все предупреждения, найдите «-mmacosx-version-min` и прокомментируйте его.
Я понимаю, что это старый пост, и вы нашли свое исправление, но позвольте мне опубликовать его здесь для всех, кто сталкивается с этой проблемой, для кого эти ответы не дают решения.
Возможно, вы неосознанно используете две разные цепочки инструментов: одну от Apple (установленную через Xcode) и одну от GNU (установленную через Home-brew или MacPorts). Если вы введете ranlib --version
и увидите информацию о версии, показывающую, что ranlib
является GNU, скорее всего, так оно и есть.
Убедитесь, что /usr/bin
входит в ваш $PATH
до /usr/local/bin
и /opt/local/bin
.