Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
iakovlev.org
 

Работа с файлами в питоне

Обьекты питона состоят из данных и методов . Рассмотрим код : aFile = open ( 'someFile.txt', 'w' ) aFile - это обьект , имеющий атрибуты : aFile.closed aFile.encoding aFile.mode aFile.name aFile.newlines aFile.softSpace Также у этого обьекта имеются собственные методы : aFile.close() aFile.flush() aFile.fileno() aFile.isatty() aFile.next() aFile.read() aFile.readline() aFile.readlines() aFile.xreadlines() aFile.seek() aFile.tell() aFile.truncate() aFile.write() aFile.writelines() Откроем файл на запись : fileHandle = open ( 'test.txt', 'w' ) Теперь запишем данные в этот файл : fileHandle.write ( 'This is a test.\nReally, it is.' ) fileHandle.close() Для добавления информации в конец файла fileHandle = open ( 'test.txt', 'a' ) fileHandle.write ( '\n\n\nBottom line.' ) fileHandle.close() Прочитаем файл и распечатаем всё его содержимое : fileHandle = open ( 'test.txt' ) print fileHandle.read() fileHandle.close() Прочитаем файл и распечатаем одну строку : fileHandle = open ( 'test.txt' ) print fileHandle.readline() # "This is a test." fileHandle.close() Можно сохранить строки файла в список fileHandle = open ( 'test.txt' ) fileList = fileHandle.readlines() for fileLine in fileList: print '>>', fileLine fileHandle.close() Содержимое файла можно сохранить в переменной : fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.readline() # "Really, it is." fileHandle.close() Можно открыть файл с определенной позиции : fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.seek ( 0 ) print fileHandle.readline() # "This is a test." fileHandle.close() Можно прочитать в файле несколько байт : fileHandle = open ( 'test.txt' ) print fileHandle.read ( 1 ) # "T" fileHandle.seek ( 4 ) print FileHandle.read ( 1 ) # "T" Для работы с файловой системой необходимо использовать модули os и stat . В следующем примере собирается информация о файле import os import stat import time fileStats = os.stat ( 'test.txt' ) fileInfo = { 'Size' : fileStats [ stat.ST_SIZE ], 'LastModified' : time.ctime ( fileStats [ stat.ST_MTIME ] ), 'LastAccessed' : time.ctime ( fileStats [ stat.ST_ATIME ] ), 'CreationTime' : time.ctime ( fileStats [ stat.ST_CTIME ] ), 'Mode' : fileStats [ stat.ST_MODE ] } for infoField, infoValue in fileInfo: print infoField, ':' + infoValue if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ): print 'Directory. ' else: print 'Non-directory.' Можно получить информацию о некоторых типах файлов : import os import stat fileStats = os.stat ( 'test.txt' ) fileMode = fileStats [ stat.ST_MODE ] if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ): print 'Regular file.' elif stat.S_ISDIR ( fileSTats [ stat.ST_MODe ] ): print 'Directory.' elif stat.S_ISLNK ( fileSTats [ stat.ST_MODe ] ): print 'Shortcut.' elif stat.S_ISSOCK ( fileSTats [ stat.ST_MODe ] ): print 'Socket.' elif stat.S_ISFIFO ( fileSTats [ stat.ST_MODe ] ): print 'Named pipe.' elif stat.S_ISBLK ( fileSTats [ stat.ST_MODe ] ): print 'Block special device.' elif stat.S_ISCHR ( fileSTats [ stat.ST_MODe ] ): print 'Character special device.' Можно получить базовую информацию : import os.path fileStats = 'test.txt' if os.path.isdir ( fileStats ): print 'Directory.' elif os.path.isfile ( fileStats ): print 'File.' elif os.path.islink ( fileStats ): print 'Shortcut.' elif os.path.ismount ( fileStats ): print 'Mount point.' Распечатать содержимое директории : import os for fileName in os.listdir ( '/' ): print fileName Создание директории : import os os.mkdir ( 'testDirectory' ) Удаление директории : import os os.rmdir ( 'testDirectory ) Создание нескольких директорий import os os.makedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' ) Точно также мы можем их удалить , при условии , что ничего туда не добавили : import os os.removedirs ( 'I/will/show/you/how/deep/the/rabbit/hole/goes' ) В следующем примере распечатаем содержимое всех файлов с расширением .txt и название файлов с расширением .exe : import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmath ( fileName, '*.txt' ): print open ( fileName ).read() elif fnmatch.fnmatch ( fileName, '*.exe' ): print fileName Найдем все файлы с расширением .txt , которые в названии состоят из одного символа : import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmatch ( fileName, '?.txt' ): print 'Text file.' Найдем все файлы с расширением .txt : import fnmatch import os import re filePattern = fnmatch.translate ( '*.txt' ) for fileName in os.listdir ( '/' ): if re.match ( filePattern, fileName ): print 'Text file.' Найдем еще раз все файлы с расширением .txt : import glob for fileName in glob.glob ( '*.txt' ): print 'Text file.' Найдем все файлы с расширением .txt , у которых в названии одна цифра: import glob for fileName in glob.glob ( '[0-9].txt' ): print fileName Для записи в файл массива строк можно использовать модуль pickle import pickle fileHandle = open ( 'pickleFile.txt', 'w' ) testList = [ 'This', 2, 'is', 1, 'a', 0, 'test.' ] pickle.dump ( testList, fileHandle ) fileHandle.close() Сохранение строк файла в массив import pickle fileHandle = open ( 'pickleFile.txt' ) testList = pickle.load ( fileHandle ) fileHandle.cloes() Более сложный вариант с сохранением в файл сложных обьектов : import pickle fileHandle = open ( 'pickleFile.txt', 'w' ) testList = [ 123, { 'Calories' : 190 }, 'Mr. Anderson', [ 1, 2, 7 ] ] pickle.dump ( testList, fileHandle ) fileHandle.close() import pickle fileHandle = open ( 'pickleFile.txt' ) testList = pickle.load ( fileHandle ) fileHandle.close() Модуль сЗickle похож по своему поведению на pickle , но более быстр : import cPickle fileHandle = open ( 'pickleFile.txt', 'w' ) cPickle.dump ( 1776, fileHandle ) fileHandle.close() Можно создавать файлы и обрабатывать их в памяти с помощью модуля StringIO import StringIO fileHandle = StringIO.StringIO ( "Let freedom ring." ) print fileHandle.read() # "Let freedom ring." fileHandle.close() Модуль cStringIO работает аналогично , но быстрее : import cStringIO fileHandle = cStringIO.cStringIO ( "To Kill a Mockingbird" ) print fileHandle.read() # "To Kill a Mockingbid" fileHandle.close()
Оставьте свой комментарий !

Ваше имя:
Комментарий:
Оба поля являются обязательными

 Автор  Комментарий к данной статье
Garry
  Спасибо за ваше старание! Сайт очень полезен для начианющих! Безполезной информации еще не видел... 
2011-02-12 04:37:47
Roman
  Спасибо! Очень полезно, указывает где копать, работает как трамплин:)
2011-09-27 10:51:57
twerp
  Большое спасибо!
Отличный справочник!
Трамплин :)
2012-04-06 13:39:09
Сергей
  Спасибо, очень помогло
2013-02-18 19:16:59
Юрий
  Спасибо, помогло
2014-04-13 04:29:41