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
Последние статьи :
  Rust 07.11   
  Go 25.12   
  EXT4 10.11   
  FS benchmark 15.09   
  Сетунь 23.07   
  Trees 25.06   
  Apache 03.02   
  SQL 30.07   
  JFS 10.06   
  B-trees 01.06   
 
TOP 20
 Go Web ...590 
 2.0-> Linux IP Networking...338 
 Secure Programming for Li...276 
 2.6-> Kernel 2.6.17...222 
 Kamran Husain...213 
 William Gropp...211 
 Robbins 4...203 
 Rodriguez 9...194 
 Rodriguez 6...188 
 UML 3...187 
 Advanced Bash Scripting G...187 
 Steve Pate 1...182 
 Kamran Husain...181 
 Ethreal 1...180 
 Стивенс 8...179 
 Daniel Bovet 2...177 
 Rodriguez 8...176 
 Kernel Notes...172 
 Steve Pate 3...172 
 Advanced Bash Scripting G...167 
 
  01.03.2019 : 2682145 посещений 

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