2013-06-05 2 views
0

Я студент-программист на семестр. В классе мы изучали открытие, чтение и запись файлов.Параметры чтения файлов Запрос (Python)

Мы использовали a_reader для решения таких задач при открытии файла. Я читал наши связанные тексты, и я заметил, что есть опция чтения CSV, которую я использовал.

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

EDIT: Я имел в виду CSV более конкретно, так как это тип файлов, которые мы используем в данный момент. Мы узнали о CSV Reader и a_reader, и пример из одной из наших лекций показан ниже.

def main(): 
a_reader = open('IDCJAC0016_009225_1800_Data.csv', 'rU') 
file_data = a_reader.read() 
a_reader.close() 
print file_data 
main() 

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

+0

Что такое 'a_reader'? Можете ли вы показать несколько примеров? – Blender

+0

Привет @Blender, как я могу привести примеры? – Newbie

+0

Как вы обычно открываете файлы? – Blender

ответ

0

Если вы спрашиваете о местах для хранения вещей, первые интерфейсы, которые вы встретите, - это файлы и сокеты (притворитесь, что сетевое подключение похоже на файл, см. http://docs.python.org/2/library/socket.html).

Если вы имеете в виду форматы файлов (например, csv), их много! Вероятно, вы можете много думать о себе, но помимо csv есть html-файлы, изображения (png, jpg, gif), архивные форматы (tar, zip), текстовые файлы (.txt!), Файлы python (.py). Список можно продолжить.

+0

Да, я имел в виду CSV в качестве примера. Я пренебрег этим, потому что я не знал точно, о чем я хотел спросить, но теперь я отредактировал вопрос (см. Выше), чтобы попытаться быть более конкретным. – Newbie

0

Существует множество способов читать файлы по-разному.

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, и он отлично работает.

+0

Когда вы говорите, что модули такие, как CSV, Math, Decimal и т. П. потому что это то, чему я научился быть модулем. Означает ли это, что любой скрипт я пишу. I.e script.py, следовательно, также является модулем? – Newbie

+0

@ KristoferWright: Да, хотя на самом деле они называются 'csv',' math' и 'decimal' во всех строчных. (В Windows вы иногда можете уйти с неправильной капитализацией, но на Mac или Linux вы обычно не можете, поэтому не попадайте в плохую привычку.) – abarnert

+0

Кроме того, да, 'script.py' является модулем. Вы можете поместить другой файл под названием 'script2.py' рядом с ним и написать' import script', и он будет работать так же, как 'csv' или' math'. – abarnert

Смежные вопросы