Как настроить возможность обработки файла определенного типа определенной программой

Обновлено: 04.07.2024

Python предоставляет встроенные функции и модули для поддержки этих операций.

Открытие/закрытие файла

Чтение/запись текстовых файлов

Объект fileObj, возвращаемый после открытия файла, содержит указатель файла. Первоначально он располагается в начале файла и перемещается вперед всякий раз, когда выполняются операции чтения/записи.

Чтение строки/строк из текстового файла
  • fileObj.readline() -> str : (наиболее часто используемый) Читает следующую строку (до и включая новую строку) и возвращает строку (включая новую строку). Он возвращает пустую строку после конца файла (EOF).
  • fileObj.readlines() -> [str] : чтение всех строк в список строк.
  • fileObj.read() -> str : чтение всего файла в строку.
Запись строки в текстовый файл
  • fileObj.write(str) -> int : Записать заданную строку в файл и вернуть количество записанных символов. Вам нужно явно завершить str с помощью '\n' , если это необходимо. '\n' будет преобразован в новую строку в зависимости от платформы ("\r\n" для Windows или '\n' для Unix/Mac OS).
Примеры

Построчная обработка текстового файла

Мы можем использовать оператор with для открытия файла, который будет автоматически закрыт при выходе, и цикл for для построчного чтения следующим образом:

Выражение with эквивалентно выражению try-finally следующим образом:

Пример: построчное копирование файла

Следующий скрипт копирует один файл в другой построчно, добавляя перед каждой строкой номер строки.

Операции с двоичными файлами

  • fileObj.tell() -> int : возвращает текущую позицию в потоке. Текущая позиция потока — это количество байтов от начала файла в двоичном режиме и непрозрачное число в текстовом режиме.
  • fileObj.seek(смещение): устанавливает текущую позицию в потоке на смещение байт от начала файла.

Например, [ЗАДАЧ]

Каталог и управление файлами

В Python управление каталогами и файлами поддерживается модулями os , os.path , Shutil , .

Операции с путями с использованием модуля os.path

В Python путь может означать:

  1. файл,
  2. каталог или
  3. символическая ссылка (символическая ссылка).

Путь может быть абсолютным (начиная с корня) или относительным относительно текущего рабочего каталога (CWD).

Разделитель пути зависит от платформы (Windows использует '\' , а Unix/Mac OS использует ' /' ). Модуль os.path поддерживает независимые от платформы операции над путями, разумно обрабатывая разделитель путей.

Проверка существования и типа пути
  • os.path.exists(path) -> bool : проверить, существует ли указанный путь.
  • os.path.isfile(путь_к_файлу) , os.path.isdir(путь_к_каталогу) , os.path.islink(путь_ссылки) -> bool : проверить, является ли указанный путь файлом, каталогом или символической ссылкой.
Формирование нового пути

Разделитель пути зависит от платформы (Windows использует '\' , а Unix/Mac OS использует '/' ). Для переносимости важно НЕ жестко кодировать разделитель пути. Модуль os.path поддерживает независимые от платформы операции над путями, разумно обрабатывая разделитель путей.

  • os.path.sep : разделитель путей текущей системы.
  • os.path.join(path, *paths) : формирование и возврат пути путем объединения одного или нескольких компонентов пути путем вставки зависящего от платформы разделителя пути ( '/' или '\' ). Чтобы сформировать абсолютный путь, вам нужно начать с os.path.sep от имени пользователя root.
Управление именем каталога и именем файла
  • os.path.dirname(путь) : возвращает имя каталога для заданного пути (файл, каталог или символическая ссылка). Возвращаемое имя каталога может быть абсолютным или относительным, в зависимости от заданного пути.
  • os.path.abspath(path) : возвращает абсолютный путь (начиная с корня) заданного path . Это может быть абсолютное имя файла, абсолютное имя каталога или абсолютная символическая ссылка.

Например, чтобы сформировать абсолютный путь к файлу с именем out.txt в том же каталоге, что и in.txt , вы можете извлечь абсолютное имя каталога из in.txt , а затем присоединиться к out.txt следующим образом:

Когда модуль загружается в Python, __file__ устанавливается на имя модуля. Попробуйте запустить этот скрипт с различными ссылками на __file__ и изучите их вывод:

Обработка символической ссылки (Unixes/Mac OS)
  • os.path.realpath(path) : (для символических ссылок) Аналогично abspath() , но возвращает канонический путь, исключая любые встречающиеся символические ссылки.

Управление каталогами и файлами с помощью модулей os и Shutil

Модули os и Shutil обеспечивают интерфейс к операционной системе и системной оболочке.

  • Если вы хотите просто прочитать или записать файл, используйте встроенную функцию open() .
  • Если вы просто хотите управлять путями (файлами, каталогами и символическими ссылками), используйте модуль os.path.
  • Если вы хотите прочитать все строки во всех файлах в командной строке, используйте модуль ввода файлов.
  • Для создания временных файлов/каталогов используйте модуль tempfile.
Управление каталогом
Управление файлами
  • os.rename(src_file, dest_file) : переименовать файл.
  • os.remove(файл) или os.unlink(файл): удалить файл. Вы можете использовать os.path.isfile(file), чтобы проверить, существует ли file.

Например [TODO],

Список каталогов
  • os.listdir(path='.') -> [path] : список всех записей в данном каталоге (исключая '.' и '..' ), по умолчанию текущий каталог.
Рекурсивное отображение каталога с помощью os.walk()
  • os.walk(top, topdown=True, onerror=None, followlinks=False): рекурсивно перечислить все записи, начиная с top .
Рекурсивное отображение каталога с помощью модуля glob (Python 3.5)
Копирование файла
Команда оболочки [TODO]
  • os.system(command_str) : запустить команду оболочки. (В Python 3 вместо этого используйте subprocess.call().)
Переменные среды [TODO]
  • os.getenv(varname, value=None) : возвращает переменную среды, если она существует, или value, если ее нет. , по умолчанию нет .
  • os.putenv(имя_переменной, значение) : установите для переменной среды значение значение.
  • os.unsetenv(имя_переменной): удалить (сбросить) переменную среды.

модуль ввода файла

Модуль fileinput обеспечивает поддержку обработки строк ввода из одного или нескольких файлов, указанных в аргументах командной строки ( sys.argv ). Например, создайте следующий скрипт с именем " test_fileinput.py ":

Обработка текста

Для простых операций с текстовыми строками, таких как поиск и замена строк, можно использовать встроенные строковые функции (например, str.replace(old, new)) ) . Для поиска и замены сложных шаблонов вам необходимо освоить регулярное выражение (регулярное выражение).

Операции со строками

Встроенный класс str предоставляет множество функций-членов для работы с текстовыми строками. Предположим, что s — это объект str.

Удалить пробелы (пробел, табуляция и новая строка)
  • s.strip()-> str : возвращает копию строки s с удаленными начальными и конечными пробелами. Пробелы включают пробел, табуляцию и новую строку.
  • s.strip([chars]) -> str : удаляет заданные начальные/конечные символы вместо пробелов.
  • s.rstrip() , s.lstrip() -> str : удалить правые (конечные) пробелы и левые (начальные) пробелы соответственно.< /li>

s.rstrip() чаще всего используется для удаления завершающих пробелов/перевода строки. Ведущие пробелы обычно имеют значение.

Верхний/нижний регистр
  • s.upper() , s.lower() -> str : возвращает копию строки s, преобразованную в верхний и нижний регистр. соответственно.
  • s.isupper() , s.islower() -> bool : проверьте, является ли строка прописной или строчной, соответственно.
  • s.find(key_str, [начало], [конец]) -> int|- 1 : вернуть самый низкий индекс в срезе s [начало:конец] (по умолчанию вся строка); или -1, если не найдено.
  • s.index(key_str, [начало], [конец]) -> int|ValueError : аналогично find() , но вызывает ValueError, если не найдено.
  • s.startswith(key_str, [начало], [конец]) , s .endsswith(key_str, [начало], [конец]) -> bool : проверить, начинается или заканчивается строка с key_str .
Найти и заменить
  • s.replace(old, new, [count]) -> str : вернуть копию при этом все вхождения old заменены на new . Необязательный параметр count ограничивает количество заменяемых вхождений, по умолчанию все вхождения.

str.replace() идеально подходит для простой замены текстовой строки без необходимости сопоставления с образцом.

Разделить на токены и объединить
  • s.split([sep], [maxsplit=-1]) -> [str] : возвращает список слов. используя sep в качестве строки-разделителя. Разделителем по умолчанию являются пробелы (пробел, табуляция и новая строка). Параметр maxSplit ограничивает максимальное количество операций разделения, по умолчанию -1 означает отсутствие ограничений.
  • sep.join([str]) -> str : обратный метод split() . Присоединяйтесь к списку строк с помощью sep в качестве разделителя.

Регулярное выражение в модуле re

Я предполагаю, что вы знакомы с регулярными выражениями, иначе вы могли бы прочитать:

  • "Регулярное выражение на примерах" для обзора синтаксиса регулярных выражений и примеров.
  • "Регулярные выражения" для полного охвата.

Модуль re обеспечивает поддержку регулярных выражений (regex).

Обратная косая черта ( \ ), исходная строка Python r'. ' против обычной строки

В синтаксисе регулярного выражения используется обратная косая черта ( \ ):

  1. для метасимволов, таких как \d (цифра), \D (не цифра), \s (пробел), \S (не пробел), \w (слово), \W (не слово)
  2. для экранирования специальных символов регулярных выражений, например, \. для . , \+ для + , \* для * , \? для ? . Вам также нужно написать \\ для соответствия \ .

С другой стороны, обычные строки Python также используют обратную косую черту для управляющих последовательностей, например, \n для новой строки, \t для табуляции. Опять же, вам нужно написать \\ вместо \ .

Чтобы записать шаблон регулярного выражения \d+ (одна или несколько цифр) в обычную строку Python, вам нужно написать '\\d+' . Это громоздко и чревато ошибками.

Решение Python использует необработанную строку с префиксом r в форме r'. ' . Он игнорирует интерпретацию управляющей последовательности строки Python. Например, r'\n' — это '\'+'n' (два символа) вместо новой строки (один символ). Используя необработанную строку, вы можете написать r'\d+' для шаблона регулярного выражения \d+ (вместо обычной строки '\\d+' ).

Кроме того, Python обозначает обратные ссылки в скобках (или группы захвата) как \1 , \2 , \3 , . которые могут быть записаны как необработанные строки r'\1' , r'\2' вместо обычных строк '\\1' и '\\2' . Обратите внимание, что в некоторых языках используются $1, $2, . для обратных ссылок.

Я предлагаю вам использовать необработанные строки для строк шаблонов регулярных выражений и строк замены.

Компиляция (создание) объекта шаблона регулярных выражений
Вызов операций регулярных выражений

Вы можете вызывать большинство функций регулярных выражений двумя способами:

  1. regexObj.func(str): применить скомпилированное регулярное выражение object к str , через функцию-член SRE_Pattern func() .
  2. re.func(regexObj|regexStr, str) : применить объект регулярного выражения (скомпилированный) или < em>regexStr (не скомпилировано) в str через функцию уровня модуля re func() . Эти функции уровня модуля представляют собой ярлыки для описанных выше, которые не требуют предварительной компиляции объекта регулярного выражения, но пропускают модификаторы, если используется regexStr.
Найти с помощью finalAll()
  • regexObj.findall(str) -> [str] : возвращает список всех совпадающих подстрок.
  • re.findall(regexObj|regexStr, str) -> [str] : то же, что и выше.
Заменить с помощью sub() и subn()
  • regexObj.sub(replaceStr, inStr, [count=0]) -> outStr: заменить (заменить) совпавшие подстроки в заданном inStr на replaceStr , до количества вхождений, по умолчанию все.
  • regexObj.subn(replaceStr, inStr, [count=0]) -> (outStr, count): аналогично sub() , но возвращает новую строку вместе с количеством замен в двух кортежах.
  • re.sub(regexObj|regexStr, replaceStr, inStr, [count=0]) ->outStr: то же, что и выше.
  • re.subn(regexObj|regexStr, replaceStr, inStr, [count=0]) -> (outStr, count) : то же, что и выше.

Примечания. Для простой замены строки используйте str.replace(old, new, [max= -1]) -> str, что более эффективно. См. раздел выше.

Использование обратных ссылок в скобках \1 , \2 , . в замене и шаблоне

В Python обратные ссылки в круглых скобках регулярных выражений (группы захвата) обозначаются как \1 , \2 , . Вы можете использовать необработанную строку (например, r'\1' ), чтобы избежать экранирования обратной косой черты в обычной строке (например, '\\1' ).

Найти с помощью search() и Match Object

Поиск() возвращает специальный объект Match, инкапсулирующий первое совпадение (или None, если совпадений нет). Затем вы можете использовать следующие методы для обработки результирующего объекта Match:

  • matchObj.group() : возвращает совпадающую подстроку.
  • matchObj. start() : возвращает начальную совпадающую позицию (включительно).
  • matchObj. end() : возвращает конечную совпавшую позицию (эксклюзивно).
  • matchObj. span() : возвращает кортеж совпадающей позиции (начало, конец).

Чтобы получить обратные ссылки (или группы захвата) внутри объекта Match:

  • matchObj. groups() : возвращает кортеж захваченных групп (или обратных ссылок)
  • matchObj .group(n) : возвращает захватываемую группу n , где n начинается с 1 .
  • matchObj.lastindex : последний индекс захватываемой группы
Поиск с использованием match() и fullmatch()

Search() соответствует любому заданному элементу inStr[begin:end] . С другой стороны, match() соответствует с начала inStr[начало:конец] (аналогично в шаблон регулярного выражения ^. ); в то время как fullmatch() соответствует всему inStr[begin:end] (аналогично шаблону регулярного выражения ^. $ ).

Найти с помощью finditer()

Функция finditer() аналогична функции findall(). findall() возвращает список совпадающих подстрок. Finditer() возвращает итератор для объектов Match. Например,

Разделение строки на токены

Функция split() разбивает заданный inStr на список, используя шаблон регулярного выражения в качестве разделителя (разделителя). Например,

Примечания. Для простого разделителя используйте str.split([sep]) , что более эффективно. См. раздел выше.

Парсинг веб-страниц

Ссылки:

Скрапинг веб-страниц (или сбор веб-страниц или извлечение веб-данных) означает чтение необработанной HTML-страницы для извлечения нужных данных. Излишне говорить, что вам необходимо освоить HTML, CSS и JavaScript.

Python поддерживает просмотр веб-страниц с помощью запросов пакетов и BeautifulSoup (bs4).

Установить пакеты

Вы можете установить соответствующие пакеты с помощью pip следующим образом:

Шаг 0. Проверка целевой веб-страницы
  1. Нажмите F12 на целевой веб-странице, чтобы включить отладчик F12.
  2. Выберите «Инспектор».
  3. Нажмите кнопку "Выбрать" (крайний левый значок со стрелкой) и наведите указатель мыши на нужную часть HTML-страницы. Изучите коды.
Шаг 2. Преобразование HTML-текста в древовидную структуру с помощью BeautifulSoup и поиск нужных данных

Вы можете записать выбранные данные в файл:

Вы также можете использовать модуль csv для записи строк данных с заголовком:

Шаг 3. Загрузите выбранный документ с помощью urllib.request

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

Шаг 4. Задержка

Чтобы избежать рассылки спама на веб-сайт с запросами на загрузку (и пометки как спамера), вам необходимо на некоторое время приостановить работу кода.

Недавнее обсуждение в списке рассылки python-ideas показало, что нам (то есть основным разработчикам Python) необходимо предоставить более четкое руководство о том, как обрабатывать задачи обработки текста, которые вызывают исключения по умолчанию в Python 3, но ранее заметен под ковер беспечным предположением Python 2 о том, что все файлы закодированы в «latin-1».

Хотя в официальных документах мы скоро кое-что добавим, это моя собственная предварительная попытка обобщить варианты обработки текстовых файлов и различные компромиссы между ними.

Что изменилось в Python 3?¶

Очевидный вопрос: что изменилось в Python 3, так что распространенные подходы, которые разработчики использовали для обработки текста в Python 2, теперь начали выдавать ошибки UnicodeDecodeError и UnicodeEncodeError в Python 3.

Основное отличие заключается в том, что поведение обработки текста по умолчанию в Python 3 направлено на обнаружение проблем с кодировкой текста как можно раньше — либо при чтении неправильно закодированного текста (обозначается UnicodeDecodeError ), либо при запросе на запись текстовой последовательности, которая не может быть быть правильно представлены в целевой кодировке (обозначается UnicodeEncodeError ).

Это контрастирует с подходом Python 2, который допускал повреждение данных по умолчанию, а строгие проверки правильности должны были запрашиваться явно. Это, безусловно, могло быть удобным, когда обрабатываемые данные представляли собой преимущественно текст ASCII, а случайное повреждение данных было маловероятным даже для обнаружения, не говоря уже о том, чтобы вызвать проблемы, но вряд ли это прочная основа для создания надежного многоязычные приложения (об этом знает любой, кто когда-либо сталкивался с ошибкой UnicodeError в Python 2).

Тем не менее, Python 3 предоставляет ряд механизмов для ослабления строгих проверок по умолчанию, чтобы обрабатывать различные варианты использования обработки текста (в частности, случаи использования, когда обработка «наилучших усилий» приемлема, а строгая правильность не требуется). . В этой статье мы попытаемся объяснить некоторые из них, рассмотрев случаи, когда их можно было бы использовать.

Обратите внимание, что многие функции, которые я обсуждаю ниже, также доступны в Python 2, но вы должны получить к ним явный доступ через тип unicode и модуль codecs. В Python 3 они являются частью поведения типа str и встроенной функции open.

Основы Юникода¶

Чтобы эффективно обрабатывать текст в Python 3, необходимо хотя бы немного узнать о Unicode и кодировках текста:

Обработчики ошибок Unicode¶

Чтобы помочь стандартизировать различные методы обработки ошибок кодирования и декодирования Unicode, Python включает концепцию обработчиков ошибок Unicode, которые автоматически вызываются при возникновении проблемы в процессе кодирования или декодирования текста.

Я не буду описывать их все в этой статье, но три из них имеют особое значение:

  • strict : это обработчик ошибок по умолчанию, который просто вызывает UnicodeDecodeError при проблемах с декодированием и UnicodeEncodeError при проблемах с кодированием.
  • surrogateescape : это обработчик ошибок, который Python использует для большинства API-интерфейсов ОС, чтобы изящно справляться с проблемами кодирования в данных, предоставляемых ОС. Он обрабатывает ошибки декодирования, помещая данные в малоиспользуемую часть пространства кодовых точек Unicode (для тех, кто интересуется более подробно, см. PEP 383). При кодировании он переводит эти скрытые значения обратно в точную исходную последовательность байтов, которую не удалось правильно декодировать. Подобно тому, как это полезно для API ОС, это может упростить изящную обработку проблем кодирования в других контекстах.
  • backslashreplace : это обработчик ошибок кодирования, который преобразует кодовые точки, которые не могут быть представлены в целевой кодировке, в эквивалентную числовую escape-последовательность строки Python. Это позволяет легко гарантировать, что UnicodeEncodeError никогда не будет выброшен, но при этом не потеряется много информации (поскольку мы не хотим, чтобы проблемы с кодированием скрывали вывод ошибок, этот обработчик ошибок включен в sys.stderr по умолчанию).

Бинарный опцион¶

Всегда доступная альтернатива – открывать файлы в двоичном режиме и обрабатывать их как байты, а не как текст. Это может работать во многих случаях, особенно там, где маркеры ASCII встроены в действительно произвольные двоичные данные.

Однако как для «текстовых данных с неизвестной кодировкой», так и для «текстовых данных с известной кодировкой, но потенциально содержащих ошибки кодирования» часто предпочтительнее привести их в форму, которую можно обрабатывать как текстовые строки. В частности, некоторые API, которые принимают как байты, так и текст, могут быть очень строгими в отношении кодирования принимаемых ими байтов (например, модуль urllib.urlparse принимает только чистые данные ASCII для обработки в виде байтов, но с радостью обработает текстовые строки, содержащие не -кодовые точки ASCII).

Обработка текстовых файлов¶

В этом разделе рассматривается ряд вариантов использования, которые могут возникнуть при обработке текста. Кодирование текста — достаточно сложная тема, поэтому единого ответа для всех не существует. Правильный ответ для данного приложения будет зависеть от таких факторов, как:

  • насколько вы контролируете используемые кодировки текста
  • важнее ли предотвращение сбоя программы, чем предотвращение повреждения данных или наоборот
  • какими должны быть распространенные ошибки кодирования и нужно ли их корректно обрабатывать или их можно просто отклонить как неверный ввод

Файлы в кодировке, совместимой с ASCII, допустимы все усилия¶

Случай использования: обрабатываемые файлы имеют кодировку, совместимую с ASCII, но вы точно не знаете, какую именно. Все файлы должны обрабатываться без каких-либо исключений, но некоторый риск повреждения данных считается приемлемым (например, сопоставление файлов журналов из нескольких источников, где некоторые ошибки данных допустимы, при условии, что журналы остаются в основном неповрежденными) .

Подход: используйте кодировку "latin-1" для сопоставления значений байтов непосредственно с первыми 256 кодовыми точками Unicode. Это самый близкий эквивалент, который предлагает Python 3 для разрешающей модели обработки текста Python 2.

Пример: f = open(fname, encoding="latin-1")

Хотя кодировку Windows cp1252 также иногда называют "latin-1", она не отображает все возможные значения байтов, поэтому ее необходимо использовать в сочетании с обработчиком ошибок surrogateescape, чтобы она никогда не выдавала UnicodeDecodeError . Кодировка latin-1 в Python реализует ISO_8859-1:1987, который сопоставляет все возможные значения байтов с первыми 256 кодовыми точками Unicode и, таким образом, гарантирует, что ошибки декодирования никогда не возникнут независимо от настроенного обработчика ошибок.

Последствия:

  • данные не будут повреждены, если их просто прочитать, обработать как текст ASCII и снова записать.
  • никогда не вызовет ошибку UnicodeDecodeError при чтении данных
  • все равно вызовет ошибку UnicodeEncodeError, если кодовые точки выше 0xFF (например, умные кавычки, скопированные из программы обработки текстов) добавляются к текстовой строке до того, как она будет закодирована обратно в байты. Чтобы предотвратить такие ошибки, используйте обработчик ошибок с обратной косой чертой (или один из других обработчиков ошибок, который заменяет кодовые точки Unicode без представления в целевой кодировке последовательностями кодовых точек ASCII).
  • может произойти повреждение данных, если исходные данные имеют кодировку, несовместимую с ASCII (например, UTF-16)
  • может произойти повреждение, если данные записываются с использованием кодировки, отличной от latin-1.
  • повреждение может произойти, если элементы строки, отличные от ASCII, изменены напрямую (например, для кодировки с переменной шириной, такой как UTF-8, которая вместо этого была декодирована как latin-1, разрезание строки в произвольной точке может разделить несколько -байтовый символ на две части)

Файлы в кодировке, совместимой с ASCII, минимизируют риск повреждения данных¶

Случай использования: обрабатываемые файлы имеют кодировку, совместимую с ASCII, но вы точно не знаете, какую именно. Все файлы должны обрабатываться без каких-либо исключений, но некоторые ошибки, связанные с Unicode, допустимы, чтобы снизить риск повреждения данных (например, сопоставление файлов журналов из нескольких источников, но желательно более явное уведомление при сопоставлении). данные могут быть повреждены из-за ошибок программирования, которые нарушают принцип обратной записи данных только в исходной кодировке)

Подход: используйте кодировку ascii с обработчиком ошибок surrogateescape.

Пример: f = open(fname, encoding="ascii", errors="surrogateescape")

Последствия:

  • данные не будут повреждены, если их просто прочитать, обработать как текст ASCII и снова записать.
  • никогда не вызовет ошибку UnicodeDecodeError при чтении данных
  • все равно вызовет ошибку UnicodeEncodeError, если кодовые точки выше 0xFF (например, умные кавычки, скопированные из программы обработки текстов) добавляются к текстовой строке до того, как она будет закодирована обратно в байты. Чтобы предотвратить такие ошибки, используйте обработчик ошибок с обратной косой чертой (или один из других обработчиков ошибок, который заменяет кодовые точки Unicode без представления в целевой кодировке последовательностями кодовых точек ASCII).
  • также вызовет ошибку UnicodeEncodeError, если будет предпринята попытка закодировать текстовую строку, содержащую экранированные значения байтов, без включения обработчика ошибок surrogateescape (или еще более терпимого обработчика, такого как обратная косая черта ).
  • некоторые библиотеки обработки Unicode, обеспечивающие правильность последовательности кодовых точек, могут жаловаться на используемый механизм экранирования (я не буду объяснять, что он здесь означает, но фраза «одиночный суррогат» намекает на то, что что-то из этих линии могут возникать — тот факт, что слово «surrogate» также появляется в имени обработчика ошибок, не является совпадением).
  • повреждение данных все еще может произойти, если исходные данные находятся в кодировке, несовместимой с ASCII (например, UTF-16)
  • повреждение данных также возможно, если экранированные части строки изменяются напрямую

Файлы в стандартной кодировке для конкретной платформы¶

Случай использования: обрабатываемые файлы имеют согласованную кодировку, кодировку можно определить из сведений об ОС и региональных настроек, и допустимо отказаться от обработки файлов, которые не закодированы должным образом.

Подход: просто откройте файл в текстовом режиме. Этот вариант использования описывает поведение по умолчанию в Python 3.

Пример: f = open(fname)

Последствия:

  • При чтении таких файлов может возникнуть ошибка UnicodeDecodeError (если данные на самом деле не в кодировке, возвращаемой locale.getpreferredencoding() )
  • При записи таких файлов может возникнуть ошибка UnicodeEncodeError (при попытке записи кодовых точек, которые не представлены в целевой кодировке).
  • обработчик ошибок surrogateescape можно использовать, чтобы быть более терпимым к ошибкам кодирования, если необходимо приложить все усилия для обработки файлов, содержащих такие ошибки, вместо того, чтобы сразу отклонять их как недопустимые входные данные.

Файлы в согласованной известной кодировке¶

Случай использования: файлы, которые нужно обработать, номинально имеют согласованную кодировку, вы заранее знаете точную кодировку, и допустимо отказаться от обработки файлов, которые не закодированы должным образом. Это становится все более и более распространенным явлением, особенно с учетом того, что многие форматы текстовых файлов начинают стандартизироваться с использованием UTF-8 в качестве предпочтительной кодировки текста.

Подход: открыть файл в текстовом режиме с соответствующей кодировкой

Пример: f = open(fname, encoding="utf-8")

Последствия:

  • При чтении таких файлов может возникнуть ошибка UnicodeDecodeError (если данные на самом деле не в указанной кодировке)
  • При записи таких файлов может возникнуть ошибка UnicodeEncodeError (при попытке записи кодовых точек, которые не представлены в целевой кодировке).
  • обработчик ошибок surrogateescape можно использовать, чтобы быть более терпимым к ошибкам кодирования, если необходимо приложить все усилия для обработки файлов, содержащих такие ошибки, вместо того, чтобы сразу отклонять их как недопустимые входные данные.

Файлы с надежным маркером кодировки¶

Случай использования: обрабатываемые файлы содержат маркеры, указывающие номинальную кодировку (с предполагаемой кодировкой по умолчанию, если маркер отсутствует), и допустимо отказать в обработке файлов, которые не закодированы должным образом.

Подход: сначала откройте файл в двоичном режиме, чтобы найти маркер кодировки, а затем снова откройте в текстовом режиме с идентифицированной кодировкой.

Пример: f = tokenize.open(fname) использует маркеры кодирования PEP 263 для определения кодировки исходных файлов Python (по умолчанию используется UTF-8, если маркер кодирования не обнаружен)

Последствия:

  • может работать с файлами в разных кодировках
  • может по-прежнему вызывать ошибку UnicodeDecodeError, если маркер кодировки неверен
  • при записи таких файлов необходимо убедиться, что маркер установлен правильно
  • даже если это не кодировка по умолчанию, для отдельных файлов все равно можно настроить использование UTF-8 в качестве кодировки, чтобы поддерживать кодировку почти всех кодовых точек Unicode.
  • обработчик ошибок surrogateescape можно использовать, чтобы быть более терпимым к ошибкам кодирования, если необходимо приложить все усилия для обработки файлов, содержащих такие ошибки, вместо того, чтобы сразу отклонять их как недопустимые входные данные.

© Copyright 2011, Nick Coghlan, редакция 2fb5e696.

Версии последние Загрузки pdf html epub On Read the Docs Project Home Сборки Бесплатный хостинг документов, предоставляемый Read the Docs.

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

Синтаксис

Параметры

  • Выбирает файлы с датой последнего изменения более поздней или равной (+) или более ранней или равной (-) указанной дате, где дата имеет формат ММ/ДД/ГГГГ.
  • Выбирает файлы с датой последнего изменения, более поздней или равной (+) текущей дате плюс указанное количество дней или более ранней или равной (-) текущей дате минус указанное количество дней.
  • Действительные значения для дней включают любое число в диапазоне от 0 до 32 768. Если знак не указан, по умолчанию используется +.

Примечания

Команда forfiles /S аналогична команде dir /S .

Вы можете использовать следующие переменные в командной строке, как указано параметром командной строки /C:

Команда forfiles позволяет запускать команду или передавать аргументы нескольким файлам. Например, вы можете запустить команду type для всех файлов в дереве с расширением имени файла .txt. Или вы можете выполнить каждый пакетный файл (*.bat) на диске C с именем файла Myinput.txt в качестве первого аргумента.

Эта команда может:

Выберите файлы по абсолютной или относительной дате с помощью параметра /d.

Создайте архивное дерево файлов, используя такие переменные, как @FSIZE и @FDATE .

Отличайте файлы от каталогов с помощью переменной @ISDIR.

Включите специальные символы в командную строку, используя шестнадцатеричный код символа в формате 0xHH (например, 0x09 для табуляции).

Эта команда работает путем реализации флага рекурсивных подкаталогов в инструментах, предназначенных для обработки только одного файла.

Примеры

Чтобы вывести список всех пакетных файлов на диске C, введите:

Чтобы вывести список всех каталогов на диске C, введите:

Чтобы вывести список всех файлов в текущем каталоге, которым не менее одного года, введите:

Чтобы отобразить текст файл устарел для каждого из файлов в текущем каталоге старше 1 января 2007 г., введите:

Чтобы вывести расширения имен всех файлов в текущем каталоге в формате столбца и добавить вкладку перед расширением, введите:

Неиммиграционный статус U (виза U) предоставляется жертвам определенных преступлений, которые подверглись психическому или физическому насилию и помогают правоохранительным органам или государственным служащим в расследовании или судебном преследовании преступной деятельности. Конгресс ввел неиммиграционную визу U после принятия в октябре 2000 года Закона о защите жертв торговли людьми и насилия (включая Закон о защите женщин-иммигрантов, подвергшихся побоям). насилия, сексуальных посягательств, торговли негражданами и других преступлений, а также защиты жертв преступлений, которые пострадали от существенного психического или физического насилия в результате преступления и готовы помочь правоохранительным органам в расследовании или судебном преследовании преступной деятельности. Закон также помогает правоохранительным органам лучше обслуживать жертв преступлений.

Чтобы узнать об обновлениях программы, посетите нашу страницу обновлений программы статуса неиммигранта U.

Вы можете иметь право на получение неиммиграционной визы категории U, если:

  • Вы стали жертвой квалифицируемой преступной деятельности.
  • Вы подверглись серьезному физическому или психическому насилию в результате того, что стали жертвой преступной деятельности.
  • У вас есть информация о преступной деятельности.Если вам еще не исполнилось 16 лет или вы не можете предоставить информацию из-за инвалидности, родитель, опекун или ближайший друг может получить информацию о преступлении от вашего имени (см. определение термина "следующий друг" в глоссарии).
  • Вы помогали, помогаете или собираетесь помочь правоохранительным органам в расследовании или судебном преследовании преступления. Если вам еще не исполнилось 16 лет или вы не можете предоставить информацию из-за инвалидности, родитель, опекун или ближайший друг может помочь правоохранительным органам от вашего имени.
  • Преступление произошло в США или было нарушено законодательство США.
  • Вы можете въезжать в США. Если вы не имеете права на въезд, вы можете подать заявление об отказе в форме I-192 «Заявление о предварительном разрешении на въезд в качестве неиммигранта».
  • Похищение
  • Оскорбительный сексуальный контакт
  • Шантаж
  • Насилие в семье
  • Вымогательство
  • Ложное заключение
  • Калечение женских половых органов
  • Преступное нападение
  • Мошенничество при заключении контрактов с иностранной рабочей силой
  • Заложник
  • Инцест
  • Принудительное рабство
  • Похищение
  • Непредумышленное убийство
  • Убийство
  • Воспрепятствование правосудию
  • Пионаж
  • Лжесвидетельство
  • Проституция
  • Изнасилование
  • Сексуальное насилие
  • Сексуальная эксплуатация
  • Работорговля
  • Преследование
  • Пытки
  • Торговля
  • Свидетель фальсификации
  • Незаконное уголовное ограничение
  • Другие связанные преступления*†

*Включает любую аналогичную деятельность, в которой элементы преступления по существу схожи.

†Также включает попытку, заговор или подстрекательство к совершению любого из вышеперечисленных и других связанных с ними преступлений.

Чтобы подать заявку (петицию) на неиммиграционный статус U, отправьте:

Вы также можете подать заявку (петицию) на неиммиграционный статус U, если вы находитесь за пределами США. Для этого необходимо:

Некоторые отвечающие требованиям члены семьи имеют право на получение производной визы U на основании их родства с вами, директором школы, подавшим заявку на получение визы U. Основной заявитель должен получить одобрение своей петиции на получение визы U, прежде чем члены его семьи смогут получить право на собственную производную визу U.

Если вы, директор, да. Тогда.
До 21 года Вы можете подать петицию от имени супруга/супруги, детей, родителей и не состоящих в браке братьев и сестер в возрасте до 18 лет
21 лет и старше Вы можете подать петицию от имени супруга(и) и детей.

Чтобы ходатайствовать о квалифицированном члене семьи, вы должны подать форму I-918, Приложение A, Петиция о соответствующем члене семьи получателя U-1 одновременно с подачей заявления или позже.

  • Все заявки на неиммиграционный статус U (петиции) и другие формы, связанные с петицией U, подаются в Центр обслуживания USCIS в Вермонте.
  • Все заявки на неиммиграционный статус U (петиции) подаются бесплатно. Вы можете запросить освобождение от платы за любую другую форму, которая необходима для вашего заявления на получение статуса неиммигранта U (ходатайство), заполнив форму I-912, Запрос на освобождение от платы, или включив свой собственный письменный запрос об освобождении от платы с вашим заявлением или петиция.
  • Требуется по запросу правоохранительных органов,
  • Необходимо в исключительных обстоятельствах,
  • Необходимо из-за задержек в консульской обработке или
  • Автоматически продлевается при подаче и рассмотрении заявки на корректировку (заявка на грин-карту).
  • Ограничение на количество виз категории U, которые могут быть выданы основным заявителям каждый год, составляет 10 000. Однако для членов семьи, получивших статус от основного заявителя, таких как супруги, дети или другие подходящие члены семьи, ограничений нет.
  • Если ограничение будет достигнуто до того, как все неиммиграционные петиции категории U будут рассмотрены, USCIS создаст список ожидания для всех подходящих основных или производных петиций, ожидающих окончательного решения и визы категории U. Заявителям, помещенным в список ожидания, будет предоставлена ​​отсрочка или условно-досрочное освобождение, и они смогут подать заявление на получение разрешения на работу, ожидая появления дополнительных виз категории U.
  • После того, как станут доступны дополнительные визы, петиционеры, находящиеся в списке ожидания, и те, кто получил добросовестное решение, получат визу в том порядке, в котором была получена их петиция. Заявителям не нужно предпринимать никаких дополнительных действий для запроса визы U. USCIS уведомит заявителя об одобрении и сопроводительной визе U.

Примечание для заявителей: основные заявители-неиммигранты категории U получают разрешение на трудоустройство в случае получения статуса после того, как основная петиция на получение статуса неиммигранта категории U будет одобрена и документ о разрешении на работу будет автоматически выдан без подачи формы I-765 «Заявка на получение разрешения на работу».

Производные члены семьи, проживающие в Соединенных Штатах, также имеют разрешение на трудоустройство в соответствии со статусом, однако документ о разрешении на работу не выдается автоматически. Форма I-765 «Заявление о разрешении на работу» может быть подана в качестве производного документа для получения документа о разрешении на работу.

Разрешение на трудоустройство для основных и производных может быть выдано только после одобрения основной петиции о неиммиграционном статусе U, независимо от того, когда была подана форма I-765, Заявление на разрешение на трудоустройство.

Основные заявители и производные члены семьи, проживающие в США, могут получить разрешение на трудоустройство и отсрочку исполнения, если основное рассматриваемое ходатайство является добросовестным и они соответствуют определенным дискреционным стандартам. Служба гражданства и иммиграции США (USCIS) направит уведомление, если основному заявителю или производному члену семьи необходимо подать форму I-765 для получения разрешения на работу, связанного с добросовестным определением.

Если установленное законом ограничение достигнуто в финансовом году и USCIS использует процесс листа ожидания, описанный в 8 CFR 214.14(d)(2), заявители на неиммиграционный статус U и его производные в США могут подать заявление на получение разрешения на работу, используя форму I-765, Заявление о разрешении на работу, основанное на отложенном действии. Заявление о разрешении на работу, основанное на отложенном действии, может быть одобрено только после того, как DHS отсрочит действие по вашему делу, независимо от того, когда была подана форма I-765

Вы можете подать заявку на получение грин-карты (изменение статуса/постоянное место жительства), если вы соответствуете определенным требованиям, в том числе:

  • Вы физически находились в Соединенных Штатах в течение непрерывного периода не менее трех лет, находясь в неиммиграционном статусе U, и
  • Вы не отказывали безосновательно в помощи правоохранительным органам с момента получения визы U.
  • Чтобы подать заявление на постоянное проживание (Зеленую карту) для себя или члена семьи, отвечающего требованиям, посетите нашу страницу Зеленая карта для жертвы преступления (неиммиграционная категория U).
  • ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Любой отвечающий требованиям член семьи, у которого нет производной визы U, когда основной неиммигрант категории U получает грин-карту, больше не имеет права на получение производной визы U, но может по-прежнему иметь право подать заявление на законное постоянное проживание.< /li>
  • Для получения информации о продлении вашей основной визы U, чтобы гарантировать, что член вашей семьи по-прежнему имеет право на получение визы U, ознакомьтесь с меморандумом о продлении визы T и U (PDF, 96,74 КБ) .

Члены семьи, получающие статус

Если член семьи, получивший статус на основании вашего статуса, соответствует требованиям для получения грин-карты, он может подать заявление на получение законного постоянного места жительства, заполнив собственную форму I-485, заявление на регистрацию постоянного места жительства или изменение статуса.

Даже если у членов вашей семьи никогда не было неиммиграционного статуса категории U или визы категории U, они все равно могут иметь право на получение грин-карты.

  • Во-первых, вы должны подать форму I-929 (Петиция для соответствующего члена семьи неиммигранта U-1) для каждого члена семьи, имеющего право на участие.
  • Вы можете подать форму I-929 одновременно или после подачи формы I-485.

Если форма I-929 для члена(ов) вашей семьи одобрена:

Сборы за подачу формы I-929

  • Все заявления по форме I-929 отправляются в сервисный центр USCIS в Вермонте.
  • Существует плата за подачу формы I-929. Если вы не в состоянии оплатить сбор, вы можете запросить освобождение от сбора, также заполнив форму I-912 или отправив отдельный письменный запрос на освобождение от сбора.

Пожалуйста, посетите нашу веб-страницу Зеленой карты для жертвы преступления (U неиммигранта) для получения дополнительной информации.

USCIS предлагает ресурсы для жертв торговли людьми и других преступлений, а также организаций, которые их обслуживают. Эта информация предназначена для того, чтобы помочь ответить на любые вопросы, которые могут возникнуть у вас или членов вашей семьи о получении неиммиграционного статуса T или U. Дополнительную информацию см. в разделе Ресурсы для жертв торговли людьми и других преступлений.

Читайте также: