Search     or:     and:
 LINUX 
 Language 
 Kernel 
 Package 
 Book 
 Test 
 OS 
 Forum 
 iakovlev.org 
 Languages
 С
 GNU С Library 
 Qt 
 STL 
 Threads 
 C++ 
 Samples 
 stanford.edu 
 ANSI C
 Libs
 LD
 Socket
 Pusher
 Pipes
 Encryption
 Plugin
 Inter-Process
 Errors
 Deep C Secrets
 C + UNIX
 Linked Lists / Trees
 Asm
 Perl
 Python
 Shell
 Erlang
 Go
 Rust
 Алгоритмы
NEWS
Последние статьи :
  Тренажёр 16.01   
  Эльбрус 05.12   
  Алгоритмы 12.04   
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
 
TOP 20
 Secure Programming for Li...6507 
 Linux Kernel 2.6...5279 
 Trees...1115 
 Максвелл 3...1050 
 William Gropp...986 
 Go Web ...957 
 Ethreal 3...929 
 Ethreal 4...915 
 Gary V.Vaughan-> Libtool...912 
 Ext4 FS...901 
 Clickhouse...900 
 Rodriguez 6...898 
 Ethreal 1...896 
 Steve Pate 1...884 
 C++ Patterns 3...860 
 Assembler...851 
 Ulrich Drepper...844 
 DevFS...786 
 MySQL & PosgreSQL...769 
 Стивенс 9...756 
 
  01.01.2024 : 3621733 посещений 

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