Существует множество способов читать файлы по-разному.
Just plain open
займет имя файла и откроет его как последовательность строк. Или вы можете просто называть read()
на нем, и он будет читать весь файл сразу в одну гигантскую строку.
codecs.open
принимает имя файла и набор символов и автоматически декодирует каждую строку в Юникоде. Или, опять же, вы можете просто позвонить read()
на нем, и он будет читать и декодировать весь файл сразу в одну гигантскую строку Unicode.
csv.reader
возьмет файл или файл-подобный объект и прочитает его как последовательность строк CSV. Нет прямого эквивалента read()
, но вы можете повернуть в любую последовательность в список, просто позвонив list
, поэтому list(my_reader)
предоставит вам список строк (каждый из которых есть сам, список).
zipfile.ZipFile
возьмет имя файла или файл или файл-подобный объект и прочитает его как ZIP-архив. Разумеется, это не идет по строкам, но вы можете архивировать файл архивированным файлом. Или вы можете делать более интересные вещи, такие как поиск архивных файлов по имени.
Существуют модули для чтения документов JSON и XML, различные способы обработки двоичных файлов и т. Д. Некоторые из них работают по-разному - например, вы можете искать XML-документ в виде дерева с одним модулем или перемещаться по элементу с другим.
Python имеет довольно обширную стандартную библиотеку, и вы можете найти документацию online. Каждый модуль, который, похоже, должен работать над файлами, возможно, может.
И, помимо того, что входит в стандартную библиотеку, PyPI, the Python Package Index имеет тысячи дополнительных модулей. Ищете способ читать документы YAML? Поиск PyPI для yaml
и вы найдете его.
Наконец, Python упрощает добавление подобных вещей по своему усмотрению. Скелет функции как csv.reader
так просто, как это:
def reader(fileobj):
for line in fileobj:
yield parse_one_csv_line(line)
Вы можете заменить эту parse_one_csv_line
все, что вы хотите, и у вас есть собственный читатель. Например, вот uppercase_reader:
def uppercase_reader(fileobj):
for line in fileobj:
yield line.upper()
В самом деле, вы можете даже написать все это в одной строке:
shouts = (line.upper() for line in fileobj)
И самое главное, что, до тех пор, как ваш читатель только дает один строка за раз, ваш читатель сам по себе является файлоподобным объектом, поэтому вы можете пройти uppercase_reader(fileobj)
до csv.reader
, и он отлично работает.
Что такое 'a_reader'? Можете ли вы показать несколько примеров? – Blender
Привет @Blender, как я могу привести примеры? – Newbie
Как вы обычно открываете файлы? – Blender