Файл содержит целые числа, в столбец напишите программу, определяющую длину самого длинного
Обновлено: 23.11.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 путь может означать:
- файл,
- каталог или
- символическая ссылка (символическая ссылка).
Путь может быть абсолютным (начиная с корня) или относительным относительно текущего рабочего каталога (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'. ' против обычной строки
В синтаксисе регулярного выражения используется обратная косая черта ( \ ):
- для метасимволов, таких как \d (цифра), \D (не цифра), \s (пробел), \S (не пробел), \w (слово), \W (не слово)
- для экранирования специальных символов регулярных выражений, например, \. для . , \+ для + , \* для * , \? для ? . Вам также нужно написать \\ для соответствия \ .
С другой стороны, обычные строки 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, . для обратных ссылок.
Я предлагаю вам использовать необработанные строки для строк шаблонов регулярных выражений и строк замены.
Компиляция (создание) объекта шаблона регулярных выражений
Вызов операций регулярных выражений
Вы можете вызывать большинство функций регулярных выражений двумя способами:
- regexObj.func(str): применить скомпилированное регулярное выражение object к str , через функцию-член SRE_Pattern func() .
- 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 em>=0]) ->outStr: то же, что и выше.
- re.subn(regexObj|regexStr, replaceStr, inStr, [count em>=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. Проверка целевой веб-страницы
- Нажмите F12 на целевой веб-странице, чтобы включить отладчик F12.
- Выберите «Инспектор».
- Нажмите кнопку "Выбрать" (крайний левый значок со стрелкой) и наведите указатель мыши на нужную часть HTML-страницы. Изучите коды.
Шаг 2. Преобразование HTML-текста в древовидную структуру с помощью BeautifulSoup и поиск нужных данных
Вы можете записать выбранные данные в файл:
Вы также можете использовать модуль csv для записи строк данных с заголовком:
Шаг 3. Загрузите выбранный документ с помощью urllib.request
Возможно, вы захотите загрузить такие документы, как текстовые файлы или изображения.
Шаг 4. Задержка
Чтобы избежать рассылки спама на веб-сайт с запросами на загрузку (и пометки как спамера), вам необходимо на некоторое время приостановить работу кода.
C = textscan( fileID , formatSpec ) считывает данные из открытого текстового файла в массив ячеек, C . Текстовый файл обозначается идентификатором файла, fileID. Используйте fopen, чтобы открыть файл и получить значение fileID. Когда вы закончите чтение из файла, закройте файл, вызвав fclose(fileID) .
textscan пытается сопоставить данные в файле со спецификатором преобразования в formatSpec . Функция textscan повторно применяет formatSpec ко всему файлу и останавливается, когда не может сопоставить formatSpec с данными.
C = textscan(fileID, formatSpec, N) считывает данные файла с использованием formatSpec N раз, где N — положительное целое число. Чтобы прочитать дополнительные данные из файла после N циклов, снова вызовите textscan, используя исходный идентификатор файла. Если вы возобновите сканирование текста файла, вызвав textscan с тем же идентификатором файла ( fileID ), то textscan автоматически возобновит чтение с того места, где было завершено последнее чтение.
C = textscan( chr , formatSpec ) читает текст из символьного вектора chr в массив ячеек C . При чтении текста из вектора символов повторные вызовы textscan каждый раз перезапускают просмотр с начала. Чтобы перезапустить сканирование с последней позиции, запросите вывод позиции.
textscan пытается сопоставить данные в векторе символов chr с форматом, указанным в formatSpec .
C = textscan( chr , formatSpec , N ) использует formatSpec N раз, где N — положительное целое число.
C = textscan( ___ , Name,Value ) задает параметры, используя один или несколько аргументов пары Name,Value в дополнение к любым входным аргументам в предыдущих синтаксисе.
[ C , position ] = textscan( ___ ) возвращает позицию в файле или вектор символов в конце сканирования в качестве второго выходного аргумента. Для файла это значение, которое ftell(fileID) вернет после вызова textscan. Для вектора символов позиция указывает, сколько символов textscan может прочитать.
Примеры
Чтение чисел с плавающей точкой
Прочитайте вектор символов, содержащий числа с плавающей запятой.
Спецификатор '%f' в formatSpec указывает textscan сопоставлять каждое поле в chr с числом с плавающей запятой двойной точности.
Отобразить содержимое массива ячеек C .
Прочитайте тот же вектор символов и усеките каждое значение до одной десятичной цифры.
Спецификатор %3.1f указывает ширину поля, равную 3 цифрам, и точность, равную 1. Функция textscan считывает в общей сложности 3 цифры, включая десятичную точку и 1 цифру после запятой. Спецификатор %*1d указывает textscan пропустить оставшуюся цифру.
Отобразить содержимое массива ячеек C .
Чтение шестнадцатеричных чисел
Прочитайте вектор символов, который представляет набор шестнадцатеричных чисел. Текст, представляющий шестнадцатеричные числа, включает цифры 0–9, буквы a–f или A–F и, при необходимости, префиксы 0x или 0X.
Чтобы сопоставить поля в шестнадцатеричных числах с шестнадцатеричными числами, используйте спецификатор '%x'. Функция textscan преобразует поля в 64-битные целые числа без знака.
Отобразить содержимое C в виде вектора-строки.
Вы можете преобразовать поля в целые числа со знаком или без знака, имеющие 8, 16, 32 или 64 бита. Чтобы преобразовать поля в шестнадцатеричных числах в 32-разрядные целые числа со знаком, используйте спецификатор '%xs32'.
Вы также можете указать ширину поля для интерпретации ввода. В этом случае префикс учитывается в ширине поля. Например, если вы установите ширину поля равной трем, как в %3x, то textscan разделит текст «0xAF 100» на три фрагмента текста: «0xA», «F» и «100». Три фрагмента текста рассматриваются как разные шестнадцатеричные числа.
Чтение двоичных чисел
Прочитайте вектор символов, который представляет набор двоичных чисел. Текст, представляющий двоичные числа, включает цифры 0 и 1 , а также необязательные префиксы 0b или 0B .
Чтобы сопоставить поля в двоичных числах с двоичными числами, используйте спецификатор '%b'. Функция textscan преобразует поля в 64-битные целые числа без знака.
Отобразить содержимое C в виде вектора-строки.
Вы можете преобразовать поля в целые числа со знаком или без знака, имеющие 8, 16, 32 или 64 бита. Чтобы преобразовать поля в binnums в 32-разрядные целые числа со знаком, используйте спецификатор '%bs32'.
Вы также можете указать ширину поля для интерпретации ввода. В этом случае префикс учитывается в ширине поля. Например, если вы установите ширину поля равной трем, как в %3b, то textscan разделит текст «0b1010 100» на три фрагмента текста: «0b1», «010» и «100». Он обрабатывает три фрагмента текста как разные двоичные числа.
Чтение различных типов данных
Загрузите файл данных и прочитайте каждый столбец с соответствующим типом.
Загрузите файл scan1.dat и просмотрите его содержимое в текстовом редакторе. Скриншот показан ниже.
Откройте файл и прочитайте каждый столбец с соответствующим спецификатором преобразования. textscan возвращает массив ячеек 1 на 9 C .
Просмотрите тип данных MATLAB® каждой из ячеек в C .
Изучите отдельные записи. Обратите внимание, что C и C являются массивами ячеек. C имеет тип данных uint32 , поэтому первые два элемента C являются максимальными значениями для 32-битного целого числа без знака или intmax('uint32') .
Удалить буквенный текст
Удалите буквальный текст "Уровень" из каждого поля во втором столбце данных из предыдущего примера. Предварительный просмотр файла показан ниже.
Откройте файл и сопоставьте буквальный текст во входных данных formatSpec.
Просмотрите тип данных MATLAB® второй ячейки в C . Вторая ячейка массива ячеек 1 на 9, C , теперь имеет тип данных int32 .
Пропустить остаток строки
Прочитайте первый столбец файла из предыдущего примера в массив ячеек, пропустив остальную часть строки.
textscan возвращает даты массива ячеек.
Укажите разделитель и преобразование пустого значения
Загрузите файл data.csv и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит данные, разделенные запятыми, а также содержит пустые значения.
Прочитайте файл, преобразуя пустые ячейки в -Inf .
textscan возвращает массив ячеек 1 на 6, C . Функция textscan преобразует пустое значение в C в -Inf , где C связан с форматом с плавающей запятой. Поскольку MATLAB® представляет целое число без знака -Inf как 0 , textscan преобразует пустое значение в C в 0 , а не в -Inf .
Укажите текст, который будет считаться пустым, или комментарии
Загрузите файл data2.csv и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит данные, которые можно интерпретировать как комментарии и другие записи, такие как "Н/П" или "Н/П", которые могут указывать на пустые поля.
Назначьте ввод, который textscan должен обрабатывать как комментарии или пустые значения, и отсканируйте данные в C .
Показать вывод.
Рассматривать повторяющиеся разделители как один
Загрузите файл data3.csv и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже.Обратите внимание, что файл содержит повторяющиеся разделители.
Чтобы рассматривать повторяющиеся запятые как один разделитель, используйте параметр MultipleDelimsAsOne и задайте для него значение 1 ( true ).
Указание спецификаторов повторных преобразований и сбор числовых данных
Загрузите файл данныхgrades.txt для этого примера и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит повторяющиеся разделители.
Прочитайте заголовки столбцов в формате '%s' четыре раза.
Прочитайте числовые данные в файле.
Значение по умолчанию для CollectOutput равно 0 ( false ), поэтому textscan возвращает каждый столбец числовых данных в отдельном массиве.
Установите индикатор позиции файла в начало файла.
Перечитайте файл и установите для параметра CollectOutput значение 1 (true), чтобы собрать последовательные столбцы одного класса в один массив. Вы можете использовать функцию repmat, чтобы указать, что спецификатор преобразования %f должен появиться три раза. Этот метод полезен, когда формат повторяется много раз.
Оценки теста, которые все двойные, собираются в один массив 4 x 3.
Чтение или пропуск текстовых и числовых полей в кавычках
Прочитайте первый и последний столбцы данных из текстового файла. Пропустить столбец текста и столбец целочисленных данных.
Загрузите файл named.txt и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что файл содержит два столбца текста в кавычках, за которым следует столбец целых чисел и, наконец, столбец чисел с плавающей запятой.
Прочитайте первый и последний столбцы данных в файле. Используйте спецификатор преобразования %q для чтения текста, заключенного в двойные кавычки ( " ). %*q пропускает текст в кавычках, %*d пропускает целочисленное поле, а %f читает число с плавающей запятой. Укажите разделитель-запятую. используя аргумент пары "имя-значение" "Разделитель".
Показать результат. textscan возвращает массив ячеек C, в котором удалены двойные кавычки, окружающие текст.
Чтение дат на иностранном языке
Загрузите файл german_dates.txt и просмотрите его содержимое в текстовом редакторе. Снимок экрана показан ниже. Обратите внимание, что первый столбец значений содержит даты на немецком языке, а второй и третий столбцы — числовые значения.
Откройте файл. Укажите схему кодировки символов, связанную с файлом, в качестве последнего ввода для fopen .
Прочитайте файл. Укажите формат дат в файле с помощью спецификатора %D. Укажите языковой стандарт дат с помощью аргумента пары "имя-значение" DateLocale.
Просмотрите содержимое первой ячейки в C. Даты отображаются на языке, используемом MATLAB, в зависимости от языкового стандарта вашей системы.
Чтение управляющих символов не по умолчанию
Используйте sprintf для преобразования управляющих последовательностей не по умолчанию в ваших данных.
Создайте текст, содержащий символ перевода формы \f . Затем, чтобы прочитать текст с помощью textscan , вызовите sprintf для явного преобразования канала формы.
textscan возвращает массив ячеек C .
Возобновить сканирование
Возобновить сканирование с позиции, отличной от начала.
Если вы возобновляете сканирование текста, textscan каждый раз читает с начала. Чтобы возобновить сканирование с любой другой позиции, используйте синтаксис аргумента с двумя выходами в вашем первоначальном вызове textscan .
Например, создайте вектор символов с именем lyric . Прочитайте первое слово вектора символов, а затем возобновите сканирование.
Входные аргументы
fileID — идентификатор файла
числовой скаляр
Идентификатор открытого текстового файла в виде числа. Перед чтением файла с помощью textscan вы должны использовать fopen, чтобы открыть файл и получить идентификатор файла.
Типы данных: двойной
formatSpec — Формат полей данных
вектор символов | строка
Формат полей данных в виде вектора символов или строки одного или нескольких спецификаторов преобразования. Когда textscan считывает ввод, он пытается сопоставить данные с форматом, указанным в formatSpec. Если textscan не может сопоставить поле данных, чтение прекращается и возвращаются все поля, прочитанные до ошибки.
Количество спецификаторов преобразования определяет количество ячеек в выходном массиве C .
Числовые поля
В этой таблице перечислены доступные спецификаторы преобразования для числовых входных данных.
Числовой тип ввода | Спецификатор преобразования | Выходной класс |
---|---|---|
Целое число со знаком | %d | int32 |
%d8 | int8 | |
%d16 | int16 | |
%d32 | int32 td> | |
%d64 | int64 | |
Целое число, без знака | %u | uint32 |
%u8 | uint8 | |
% u16 | uint16 | |
%u32 | uint32 | |
%u64< /td> | uint64 | |
Число с плавающей запятой | %f | double |
%f32 | одинарный | |
%f64 | двойной | < /tr>|
%n | double | |
Шестнадцатеричное число, целое без знака | %x | uint64 |
%xu8 | uint8 | |
%xu16 | uint16 | |
%xu32 | uint32 | |
%xu64 тд> | uint64 | |
Шестнадцатеричное число, целое число со знаком | %xs8 | int8 | < /tr>
%xs16 | int16 | |
%xs32 | int32 | |
%xs64 | int64 | |
Двоичное число, целое число без знака | %b | uint64 |
%bu8 | uint8 | |
%bu16 td> | uint16 | |
%bu32 | uint32 | |
%bu64 | uint64 | |
Двоичное число, целое число со знаком | %bs8 | int8 | < /tr>
%bs16 | int16 | |
%bs32 | int32 | |
%bs64 | int64 |
Нечисловые поля
В этой таблице перечислены доступные спецификаторы преобразования для входных данных, содержащих нечисловые символы.
Прочитайте как массив ячеек из символьных векторов. Если текст начинается с двойной кавычки ( " ), опустите ведущую кавычку и сопровождающую ее закрывающую метку, которая является вторым экземпляром одиночной двойной кавычки. Замените экранированные двойные кавычки (например, ""abc"" ) с одиночными двойными кавычками ("abc"). %q игнорирует любые двойные кавычки, которые появляются после закрывающей двойной кавычки.
Пример: «%q» читается как «Джо «Молния» Смит-младший» как «Джо «Молния» Смит-младший». .
Прочитайте так же, как %q выше, а затем преобразуйте в значение даты и времени.
Прочитайте так же, как %q выше, а затем преобразуйте его в значение даты и времени. fmt описывает формат вводимого текста. Входные данные fmt представляют собой вектор символов буквенных идентификаторов, который является допустимым значением для свойства Format объекта datetime. textscan преобразует текст, не соответствующий этому формату, в значения NaT.
Дополнительную информацию о форматах отображения даты и времени см. в описании свойства Format для массивов даты и времени.
Пример: "%D" указывает формат даты, такой как "01-янв-2014".
Прочитайте так же, как %q выше, а затем преобразуйте в значение длительности.
Прочитайте так же, как %q выше, а затем преобразуйте его в значение длительности. fmt описывает формат вводимого текста. Входные данные fmt представляют собой вектор символов буквенных идентификаторов, который является допустимым значением свойства Format длительности. textscan преобразует текст, не соответствующий этому формату, в значения NaN.
Для получения дополнительной информации о форматах отображения длительности см. свойство format для массивов длительности.
Пример: "%T" указывает формат продолжительности, например "10:30:15", что соответствует 10 часам, 30 минутам и 15 секундам.
Читайте так же, как %q , а затем преобразуйте в название категории в массиве категорий. textscan преобразует текст в неопределенное значение в выходном категориальном массиве.
Читайте как массив ячеек из символьных векторов, символы в квадратных скобках до первого несовпадающего символа. Чтобы включить ] в набор, сначала укажите его: %[]. ] .
Пример: %[mus] читается как "summer" как "summ".
Исключать символы внутри квадратных скобок, читая до первого совпадающего символа. Чтобы исключить ] , сначала укажите его: %[^]. ] .
Пример: %[^xrg] читает "лето" как "лето".
Необязательные операторы
Спецификаторы преобразования в formatSpec могут включать необязательные операторы, которые появляются в следующем порядке (включая пробелы для ясности):
Необязательные операторы включают:
Поля и символы, которые следует игнорировать
textscan последовательно считывает все символы в вашем файле, если только вы не прикажете ему игнорировать определенное поле или часть поля.
Вставьте символ звездочки (*) после символа процента (%), чтобы пропустить поле или часть символьного поля.
Пропустить поле.k — любой спецификатор преобразования, определяющий поле, которое необходимо пропустить. textscan не создает выходную ячейку для таких полей.
Пример: '%s %*s %s %s %*s %*s %s' (пробелы необязательны) преобразует текст
'Черный дрозд поет глубокой ночью' в четыре выходные ячейки с
'Черный дрозд' 'в' 'ночь'
Пропустить до n символов, где n – целое число, меньшее или равное количеству символов в поле.
Пример: '%*3s %s' преобразует 'abcdefg' в 'defg' . Когда разделителем является запятая, тот же разделитель преобразует 'abcde,fghijkl' в массив ячеек, содержащий 'de';'ijkl' .
Пропустить n символов, включая символы-разделители.
textscan считывает количество символов или цифр, заданное шириной или точностью поля, или до первого разделителя, в зависимости от того, что наступит раньше. Десятичная точка, знак ( + или - ), символ экспоненты и цифры в числовой экспоненте считаются символами и цифрами в пределах ширины поля. Для комплексных чисел ширина поля относится к индивидуальной ширине действительной и мнимой частей. Для мнимой части ширина поля включает + или -, но не i или j. Укажите ширину поля, вставив число после символа процента (%) в спецификаторе преобразования.
Пример: %5f читает "123,456" как 123,4 .
Пример: %5c читает 'abcdefg' как 'abcde' .
Когда оператор ширины поля используется с одиночными символами ( %c ), textscan также считывает разделители, пробелы и символы конца строки.
Пример: %7c считывает 7 символов, включая пробел, поэтому "День и ночь" читается как "День и".
Для чисел с плавающей запятой ( %n , %f , %f32 , %f64 ) можно указать количество десятичных цифр для чтения.
Пример: %7.2f читается как "123,456" как 123,45 .
Буквальный текст, который следует игнорировать
textscan игнорирует текст, добавляемый к спецификатору преобразования formatSpec.
A = fscanf( fileID , formatSpec ) считывает данные из открытого текстового файла в вектор-столбец A и интерпретирует значения в файле в соответствии с форматом, заданным formatSpec . Функция fscanf повторно применяет формат ко всему файлу и устанавливает указатель файла на маркер конца файла. Если fscanf не может сопоставить formatSpec с данными, он считывает только совпадающую часть и прекращает обработку.
Текстовый файл обозначается идентификатором файла, fileID . Используйте fopen, чтобы открыть файл, указать кодировку символов и получить значение fileID. Когда вы закончите чтение, закройте файл, вызвав fclose(fileID) .
A = fscanf( fileID , formatSpec , sizeA ) считывает данные файла в массив A с размерами sizeA и размещает указатель файла после последнего прочитанного значения. fscanf заполняет A в порядке столбцов. sizeA должен быть положительным целым числом или иметь форму [m n] , где m и n — положительные целые числа.
[ A , count ] = fscanf( ___ ) дополнительно возвращает количество полей, которые fscanf считывает в A . Для числовых данных это количество прочитанных значений. Вы можете использовать этот синтаксис с любым из входных аргументов предыдущих синтаксисов.
Примеры
Чтение содержимого файла в вектор-столбец
Создайте образец текстового файла, содержащего числа с плавающей запятой.
Просмотрите содержимое файла.
Откройте файл для чтения и получите идентификатор файла, fileID .
Определите формат данных для чтения. Используйте '%f' для указания чисел с плавающей запятой.
Прочитайте данные файла, заполнив выходной массив A в порядке столбцов. fscanf повторно применяет формат formatSpec ко всему файлу.
A — это вектор-столбец, содержащий данные из файла.
Читать содержимое файла в массив
Создайте образец текстового файла, содержащего целые числа и числа с плавающей запятой.
Просмотрите содержимое файла.
Откройте файл для чтения и получите идентификатор файла, fileID .
Определите формат данных для чтения и форму выходного массива.
Прочитайте данные файла, заполнив выходной массив A в порядке столбцов. fscanf повторно использует формат formatSpec во всем файле.
Транспонируйте массив так, чтобы A совпадала с ориентацией данных в файле.
Пропускать определенные символы в файле
Пропускать определенные символы в образце файла и возвращать только числовые данные.
Создайте образец текстового файла, содержащего значения температуры.
Прочитайте числа в файле, пропуская текст, °C. Также верните количество значений, которые считывает fscanf. Расширенный код ASCII 176 представляет знак градуса.
A — это вектор, содержащий числовые значения в файле. count указывает, что fscanf прочитал пять значений.
Входные аргументы
fileID — Идентификатор файла
целое число
Идентификатор файла открытого текстового файла в виде целого числа. Перед чтением файла с помощью fscanf вы должны использовать fopen, чтобы открыть файл и получить идентификатор файла.
Типы данных: двойной
formatSpec — Формат полей данных
вектор символов | строковый скаляр
Формат полей данных в файле в виде вектора символов или строкового скаляра одного или нескольких спецификаторов преобразования. Когда fscanf читает файл, он пытается сопоставить данные с форматом, указанным formatSpec .
Числовые поля
В этой таблице перечислены доступные спецификаторы преобразования для числовых входных данных. fscanf преобразует значения в их десятичное представление (с основанием 10).
Значения в файле определяют базу:
По умолчанию используется основание 10.
Если начальные цифры 0x или 0X , то значения являются шестнадцатеричными (с основанием 16).
Если начальная цифра 0 , то значения восьмеричные (с основанием 8).
64-битные значения, основание 10, 8 или 16
Основание 16 (шестнадцатеричное)
64-битные значения, основание 10, 8 или 16
Поля с плавающей запятой могут содержать любое из следующих значений (без учета регистра): Inf , -Inf , NaN или -NaN .
Символьные поля
В этой таблице перечислены доступные спецификаторы преобразования для ввода символов.
Вектор символов или строковый скаляр
Читать все символы, кроме пробелов.
Чтение любого отдельного символа, включая пробелы.
Чтобы читать несколько символов одновременно, укажите ширину поля.
Только для чтения символы в квадратных скобках до первого несовпадающего символа или пробела.
Пример: %[mus] читается как "summer" как "summ".
Если formatSpec содержит комбинацию числовых и символьных спецификаторов, то fscanf преобразует каждый символ в его числовой эквивалент. Это преобразование происходит, даже если формат явно пропускает все числовые значения (например, formatSpec равен '%*d %s').
Необязательные операторы
Поля и символы, которые следует игнорировать
fscanf последовательно считывает все числовые значения и символы в вашем файле, если только вы не укажете ему игнорировать определенное поле или часть поля. Чтобы пропустить поля, вставьте звездочку ( * ) после знака процента ( %). Например, чтобы пропустить целые числа, укажите %*d .
Чтобы указать максимальное количество цифр или текстовых символов для чтения за раз, вставьте число после символа процента. Например, %10c считывает до 10 символов за раз, включая пробелы. %4f считывает до 4 цифр за раз, включая десятичную точку.
Буквальный текст, который следует игнорировать
fscanf игнорирует указанный текст, добавленный к спецификатору преобразования formatSpec.
Какое выражение следует использовать для доступа к последнему элементу числа, если предположить, что оно содержит 10 элементов?
int[] data = new int[8];
data[0] = 3;
data[7] = -18;
data[4] = 5;
данные[1] = данные[0];
int x = данные[4];
данные[4] = 6;
данные[x] = данные[0] * данные[1];
данные[0]< /p>
first = [3, 7]
second = [3, 7]
Они содержат одинаковые элементы.
int[] first = new int[2];
first[0] = 3;
first[1] = 7;
int[] second = new int[2] ;
секунда[0] = 3;
секунда[1] = 7;
импортировать java.util.*; // для класса массивов
открытый класс ReferenceMystery1 public static void main(String[] args) int x = 0;
int[] a = новый int[4];
х++;
тайна(х, а);
System.out.println(x + " " + Arrays.toString(a));
тайна(х, а);
System.out.println(x + " " + Arrays.toString(a));
>
public static void secret(int x, int[] a) x++;
а[х]++;
System.out.println(x + " " + Arrays.toString(a));
>
>
строка 1
импортировать java.util.*; // для класса массивов
открытый класс ReferenceMystery2 public static void main(String[] args) int x = 1;
int[] a = новый int[2];
тайна(х, а);
System.out.println(x + " " + Arrays.toString(a));
х--;
a[1] = a.length;
тайна(х, а);
System.out.println(x + " " + Arrays.toString(a));
>
public static void secret(int x, int[] list) list[x]++;
х++;
System.out.println(x + " " + Arrays.toString(list));
>
>
строка 1
String[] a = ;
swapPairs(a);
Ваш метод должен переключать первую пару ("четыре", "счет"), вторую пару ("и", "семь" ) и третью пару ("лет", "назад"), чтобы получить этот массив:
Если имеется нечетное количество значений, последний элемент не перемещается. Например, если исходный список был таким:
Он снова поменял бы местами пары значений, но конечное значение ("деревня") не было бы перемещено, что дало бы этот список:
public static void secret3(int[] data, int x, int y) data[data[x]] = data[y];
data[y] = x;
>
Каковы значения элементов в массиве чисел после выполнения следующего кода?
int[] numbers = ;
загадка3(числа, 3, 1);
загадка3(числа, 5, 6);
загадка3(числа, 8, 4);
числа[0]
public static int arrayMystery4(int[] list) int x = 0;
для (int i = 1; i x) x = y;
>
>
return x;
>
Для каждого из приведенных ниже массивов укажите, какое значение будет возвращено, если вызвать метод secret и передать этот массив в качестве параметра .
public static void arrayMystery5(int[] nums) for (int i = 0; i nums[i + 1]) nums[i + 1]++;
>
>
>
Для каждого из приведенных ниже массивов укажите, каким будет содержимое массива после вызова метода secret и передачи этого массива в качестве параметра.
В следующей таблице показаны некоторые вызовы вашего метода и их результаты (наибольшие и наименьшие значения подчеркнуты):
Например, если переданный массив содержит значения, а переданное целое число k равно 2, ваш метод должен вернуть 99, так как существуют два значения не меньше 99 (101 и 102).
int[] array = ;
Первый пробел равен 2 (3–1), второй пробел равен 3 (6–3), третий пробел равен 1 (7–6), а четвертый пробел равен 5 (12 - 7). Таким образом, вызов minGap(array) должен вернуть 1, потому что это наименьший пробел в массиве. Обратите внимание, что минимальный зазор может быть отрицательным числом. Например, если в массиве хранится следующая последовательность значений:
Разрывы будут вычисляться как 2 (5–3), 6 (11–5), -7 (4–11) и 4 (8–4). Из этих значений -7 является наименьшим, поэтому оно будет возвращено.
Эта информация о пробелах может быть полезна для определения других свойств массива. Например, если минимальный разрыв больше или равен 0, вы знаете, что массив находится в отсортированном (неубывающем) порядке. Если разрыв больше 0, значит, массив и отсортирован, и уникален (строго по возрастанию).
Читайте также: