이 기사의 예에서는 Python 파일 관리 방법을 설명합니다. 다음과 같이 참고할 수 있도록 모든 사람과 공유하세요.
1. Python의 파일 관리
파일 관리는 많은 애플리케이션의 기본 기능이자 중요한 구성 요소입니다. Python은 특히 다른 언어에 비해 파일 관리를 매우 간단하게 만들 수 있습니다.
아래에서는 Peyton McCullough가 파일 관리의 기본 사항을 설명합니다.
소개
당신이 플레이한 게임은 파일을 사용하여 아카이브를 저장합니다. 주문한 내용은 당연히 파일에 저장되며, 아침에 작성한 보고서도 파일에 저장됩니다.
파일 관리는 거의 모든 언어로 작성된 많은 애플리케이션에서 중요한 부분입니다. 파이썬도 예외는 아닙니다. 이 기사에서는 일부 모듈을 사용하여 파일을 조작하는 방법을 살펴보겠습니다. 파일 읽기, 파일 쓰기, 파일 내용 추가 및 일부 대체 사용법 작업을 완료합니다. 좋아요, 시작해 보겠습니다.
파일 읽기 및 쓰기
가장 기본적인 파일 작업은 물론 파일의 데이터를 읽고 쓰는 것입니다. 이것은 또한 마스터하기가 매우 쉽습니다. 이제 쓰기 위해 파일을 엽니다.
fileHandle = open ( 'test.txt', 'w' )
'w'는 파일에 데이터가 기록된다는 의미이며 나머지 명령문은 이해하기 쉽습니다. 다음 단계는 파일에 데이터를 쓰는 것입니다:
fileHandle.write ( 'This is a test.\nReally, it is.' )
이 명령문은 파일의 첫 번째 줄에 "This is a test."를 쓰고 두 번째 줄에 "Really, it is"를 씁니다. 파일. 마지막으로 파일을 정리하고 닫아야 합니다.
fileHandle.close()
보시다시피 Python의 객체 지향 메커니즘을 사용하면 이는 정말 간단합니다. "w" 메서드를 사용하여 파일에 데이터를 다시 쓰면 원본 내용이 모두 삭제된다는 점에 유의해야 합니다. 원본 콘텐츠를 유지하려면 "a" 메서드를 사용하여 파일 끝에 데이터를 추가할 수 있습니다.
fileHandle = open ( 'test.txt', 'a' ) fileHandle.write ( '\n\nBottom line.' ) fileHandle.close()
그런 다음 test.txt를 읽고 다음을 표시합니다. content:
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()<DIV></DIV> for fileLine in fileList: print '>>', fileLine fileHandle.close()
Python 파일을 읽을 때 아래와 같이 파일 내 위치가 기억됩니다.
fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.readline() # "Really, it is."fileHandle.close()
보시다시피 두 번째 줄만 표시됩니다. 그러나 Python에게 처음부터 읽도록 요청하면 이 문제를 해결할 수 있습니다.
fileHandle = open ( 'test.txt' ) garbage = fileHandle.readline() fileHandle.seek ( 0 ) print fileHandle.readline() # "This is a test." fileHandle.close()
위의 예에서는 Python에게 파일의 첫 번째 바이트부터 데이터 읽기를 시작하도록 요청합니다. 따라서 텍스트의 첫 번째 줄이 표시됩니다. 물론 파일에서 Python의 위치를 얻을 수도 있습니다:
fileHandle = open ( 'test.txt' ) print fileHandle.readline() # "This is a test." print fileHandle.tell() # "17" print fileHandle.readline() # "Really, it is."
또는 파일에서 한 번에 몇 바이트씩 읽을 수도 있습니다:
fileHandle = open ( 'test.txt' ) print fileHandle.read ( 1 ) # "T" fileHandle.seek ( 4 ) print FileHandle.read ( 1 ) # " "(原文有错)
Windows 및 Macintosh 환경에서는 이미지, 실행 파일 등 바이너리 모드로 파일을 읽고 써야 하는 경우가 있습니다. 이때, 파일을 여는 메소드 매개변수에 "b"만 추가하면 됩니다:
fileHandle = open ( 'testBinary.txt', 'wb' ) fileHandle.write ( 'There is no spoon.' ) fileHandle.close() fileHandle = open ( 'testBinary.txt', 'rb' ) print fileHandle.read() fileHandle.close()
2. 기존 파일에서 정보를 얻습니다.
파이썬 모듈을 사용하여 다음을 수행합니다. 기존 파일에서 정보를 얻습니다. 파일에 대한 기본 정보를 얻으려면 "os" 모듈과 "stat" 모듈을 사용하십시오.
import os import stat import time<DIV></DIV> 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 ] ):
또한 "os.path"를 사용하여 기본 정보를 얻을 수 있습니다:
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' ) 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'
특정 파일 형식을 작업해야 하는 경우 "fnmatch" 모듈을 선택할 수 있습니다. 다음은 ".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
문자는 모든 길이의 문자를 나타낼 수 있습니다. 문자를 일치시키려면 "?" 기호를 사용하십시오:
import fnmatch import os for fileName in os.listdir ( '/' ): if fnmatch.fnmatch ( fileName, '?.txt' ): print 'Text file.'
"fnmatch" 모듈은 정규식을 지원합니다:
import fnmatch import os import re filePattern = fnmatch.translate ( '*.txt' ) for fileName in os.listdir ( '/' ): if re.match ( filePattern, fileName ): print 'Text file.'
파일 유형을 일치시켜야 하는 경우 "glob" 모듈을 사용하는 것이 더 좋은 방법입니다. 이 모듈의 형식은 "fnmatch"와 유사합니다:
import glob for fileName in glob.glob ( '*.txt' ): print 'Text file.'
정규 표현식과 마찬가지로 다양한 문자를 사용한 일치도 가능합니다. 확장자 앞에 숫자가 하나만 있는 파일 이름을 표시한다고 가정해 보겠습니다.
import glob for fileName in glob.glob ( '[0-9].txt' ): print filename
"glob" 모듈은 이를 달성하기 위해 "fnmatch" 모듈을 사용합니다.
4. 데이터 마샬링
이전 섹션에서 소개한 모듈을 사용하면 파일에서 문자열을 읽고 쓸 수 있습니다.
그러나 때로는 목록, 튜플, 사전 및 기타 개체와 같은 다른 유형의 데이터를 전달해야 할 수도 있습니다. Python에서는 Pickling을 사용하여 이를 수행할 수 있습니다. Python 표준 라이브러리의 "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.close()
이제 더 복잡한 데이터를 저장해 보세요.
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()
如上所述,使用Python的"pickle"模块编组确实很简单。众多对象可以通过它来存储到文件中。如果可以的话,"cPickle"同样胜任这个工作。它和"pickle"模块一样,但是速度更快:
import cPickle fileHandle = open ( 'pickleFile.txt', 'w' ) cPickle.dump ( 1776, fileHandle ) fileHandle.close()
五、创建"虚拟"文件
你用到的许多模块包含需要文件对象作为参数的方法。但是,有时创建并使用一个真实的文件并让人感到有些麻烦。所幸的是,在Python中,你可以使用"StringIO"模块来创建文件并将其保存在内存中:
import StringIO fileHandle = StringIO.StringIO ( "Let freedom ring" ) print fileHandle.read() # "Let freedom ring." fileHandle.close()
cStringIO"模块同样有效。它的使用方法和"StringIO"一样,但就像"cPickle"之于"pickle",它速度更快:
import cStringIO fileHandle = cStringIO.cStringIO ( "To Kill a Mockingbird" ) print fileHandle.read() # "To Kill a Mockingbid" fileHandle.close()
结论
文件管理,是众多编程语言的程序员在编写应用程序是经常遇到的问题。幸好,和其它语言相比,Python使其出乎意料地容易。Python的标准库中提供了许多相关的模块帮助程序员解决这方面的问题,而它的面向对象的机制也简化了操作。
好了,现在你已经了解了Python中文件管理的基本知识,可以在今后的应用程序中很好地使用了。
希望本文所述对大家Python程序设计有所帮助。
更多Python 文件管理实例详解相关文章请关注PHP中文网!