python 文件管理

一、python中文件管理

  文件管理是很多应用程序的基本功能和重要组成部分。Python可以使文件管理极其简单,特别是和其它语言相对比。

1.介绍

  几乎以任何语言编写的众多应用程序中,文件管理是很重要的一部分。Python当然也不例外。在这篇文章中,我们将探究如何使用一些模块来操作文件。我们会完成读文件,写文件,增加文件内容的操作,写文件,增加文件内容的操作,还有一些另类的用法。

2.文件读写

  最简单文件操作--读取

 FileRead = open("test.txt",‘r‘)
 FileRead.read()  #读取文件所有内容,使用print(FileRead.read())函数输出文件内容
 FileRead.close()
FileRead = open("test.txt",‘r‘)
for lines in FileRead.readlines():
    print("lines:",lines.strip(‘\n‘))
FileRead.close()

#输出结果
lines: Hello World
lines: Welcome To Beijing

文件循环读取行

Python在读取一个文件时,会记住其在文件中的位置。所有在调用FileRead.readline()的时候会从上次读取的位置开始

 FileRead = open("test.txt",‘r‘)
 print(FileRead.readline().strip(‘\n‘)) #读取第一行数据
 print(FileRead.readline().strip(‘\n‘)) #读取第二行数据
 FileRead.close()

使用seek(0)将文件读取的行位置标记到指定的位置

 FileRead = open("test.txt",‘r‘)
 print(FileRead.readline().strip(‘\n‘)) #读取第一行数据
 FileRead.seek(0) #将上次读取的位置调回到首行位置
 print(FileRead.readline().strip(‘\n‘)) #读取第一行数据
 FileRead.close()

使用tell()获取python在文件中的当前位置

 FileRead = open("test.txt",‘r‘)
 print(FileRead.readline().strip(‘\n‘)) #读取第一行数据
 print(FileRead.tell()) #获取python所在文件中的当前位置
 print(FileRead.readline().strip(‘\n‘)) #读取第二行数据
 FileRead.close()

初级操作--写数据到文件

 FileRead = open("test.txt",‘w‘) #‘w’--是指文件将被写入数据,已有的数据将会被清空
 FileRead.write(‘Hello Everybody!\nWelcome To China!‘) #被写入文件的数据,使用‘\n’可以实现换行操作
 FileRead.close() #关闭文件句柄,每次读写文件都应该在最后面将文件关闭
 FileRead = open("test.txt",‘a‘) #‘a’--是指文件将被写入数据,已有的数据不会被清空,在已有数据后面追加下面要添加的数据
 FileRead.write(‘Hello Everybody!\nWelcome To China!‘) #被写入文件的数据,使用‘\n’可以实现换行操作
 FileRead.close() #关闭文件句柄,每次读写文件都应该在最后面将文件关闭

文件的高级操作--‘rb’ ‘wb‘--使用此模式打开文件是读写二进制文件

二、从现有文件中获取数据

  使用Python中的模块,可以从现有文件中获取信息。使用“os”模块和“stat”模块可以获取文件的基本信息:

#!/usr/local/env python3
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 ]
}
print(FileStats) #os.stat_result(st_mode=33206, st_ino=6473924464448069, st_dev=434835, st_nlink=1, st_uid=0, st_gid=0, st_size=70, st_atime=1451980042, st_mtime=1451981189, st_ctime=1451979747)
print(FileInfo) #{‘Size‘: 70, ‘Mode‘: 33206, ‘LastAccessed‘: ‘Tue Jan  5 15:47:22 2016‘, ‘LastModified‘: ‘Tue Jan  5 16:06:29 2016‘, ‘CreationTime‘: ‘Tue Jan  5 15:42:27 2016‘}

获取文件的相关信息

判断文件是不是目录

#!/usr/local/env python3
‘‘‘
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:[email protected]
‘‘‘
import os
import stat
import time
def DirIf(FilenName):
    FileStats = os.stat(FilenName) #获取文件的基本信息
    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 ]
    }
    if stat.S_ISDIR( FileStats[ stat.ST_MODE ] ): #判断文件是不是目录
        return True
    else:
        return False

判断目录函数封装

对上面封装的函数进行调用的方法:

if DirIf(‘test.txt‘) == True:
    print("目录")
elif DirIf(‘test.txt‘) == False:
    print(‘非目录‘)

判断文件类型

#!/usr/local/env python3
‘‘‘
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:[email protected]
‘‘‘
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.‘)

使用os.path()判断文件类型

获取文件中的行数

def Countnum(filename):
    files = open(filename)
    data = files.read()
    files.flush()
    files.close()
    return data.count(‘\n‘)

三、python对目录的操作

  和普通文件一样,关于目录的操作也很容易掌握。首先,列出一个目录的内容:

 import os
 for fileName in os.listdir ( ‘/‘ ):
     print(fileName)
创建目录
import os
os.mkdir(‘testDir‘)
创建多级目录
import os
os.makedirs(‘testDir/test2/test3/test4‘)  #os.makedirs()

删除多级空目录
import os
os.removedirs(‘testDir/test2/test3/test4‘)

删除目录
import os
os.rmdir(‘testDir‘)

四、python对特定类型的文件进行操作

  使用fnmatch模块显示‘.txt‘和‘.exe‘文件名

import fnmatch
import os
for FileName in os.listdir(‘/‘):
    if fnmatch.fnmatch(FileName,‘*.txt‘):
        print(open(FileName).read())
    elif fnmatch.fnmatch(FileName,‘*.exe‘):
        print(FileName)

python搜索指定类型的文件

“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模块查找一种类型的文件比较方便

import glob
for FileName in glob.glob(‘*.txt‘):
    print(FileName)
    print(‘Text file.‘)

使用数字匹配文件名

import glob
for FileName in glob.glob ( ‘[0-9].txt‘ ):
    print(Filename)

五、数据编组 

  使用前一节中介绍的模块,可以实现在文件中对字符串的读写。然而,有的时候,你可能需要传递其它类型的数据,如list、tuple、dictionary和其它对象。在Python中,你可以使用Pickling来完成。你可以使用Python标准库中的“pickle”模块完成数据编组。 

  编组一个包含数字和字符的列表:

#!/usr/local/env python3
import pickle
FileHandle = open( ‘PickleFile.txt‘,‘wb‘)
TestList = [‘This‘,2,‘is‘,1,‘a‘,0,‘test.‘]
pickle.dump(TestList,FileHandle )
FileHandle.close()

拆分编组:

#!/usr/local/env python3
import pickle
FileHandle = open(‘PickleFile.txt‘,‘rb‘)  #注意要加‘b‘进行二进制读写操作,否则报错
TestList = pickle.load(FileHandle)
print(TestList)
FileHandle.close()

错误

TypeError: must be str, not bytes错误:
解答: 写文件处 open(filename, ‘w‘).write 应该写为 open(filename, ‘wb‘).write

复杂编组:

import pickle

FileHandle = open(‘PickleFile.txt‘,‘wb‘)
TestList = [ 123, { ‘Calories‘ : 190 }, ‘swht‘, [ 1, 2, 7 ] ]
pickle.dump(TestList,FileHandle)
FileHandle.close()

拆组:

import pickle

FileHandle = open(‘PickleFile.txt‘,‘rb‘)
TestList = pickle.load(FileHandle)
print(TestList)
FileHandle.close()

比较:在python2.7版本里还有一个模块,相对于pickle模块而言,处理速度更快。当然在python3已经将其去掉,或者将其性能整合到pickle模块中了。

#!/usr/local/env python2
import cPickle

FileHandle = open(‘PickleFile.txt‘,‘wb‘)
TestList = [ 123, { ‘Calories‘ : 190 }, ‘swht‘, [ 1, 2, 7 ] ]
cPickle.dump(TestList,FileHandle)
FileHandle.close()

六、创建虚拟文件

  你用到的许多模块包含需要文件对象作为参数的方法。但是,有时创建并使用一个真实的文件并让人感到有些麻烦。所幸的是,在Python中,你可以使用“StringIO”或者“cStringIO”模块来创建文件并将其保存在内存中,但很不幸的是,这两个模块在python3中都已经被移除。如果你使用的是python2的环境,可以尝试使用一下:

#!/usr/local/env python2
import StringIO

FileHandle = StringIO.StringIO("Let freedom ring") #创建的文件存在内存中
print(FileHandle.read()) # "Let freedom ring."
FileHandle.close()
#!/usr/local/env python2
import cStringIO

FileHandle = cStringIO.cStringIO("Let freedom ring") #创建的文件存在内存中
print(FileHandle.read()) # "Let freedom ring."
FileHandle.close()
				
时间: 2024-10-10 22:24:43

python 文件管理的相关文章

Python文件管理、乱码及对passwd文件排序

1.读写文件 读文件:     f = open("1.txt")     text = f.readlines()     print(text) 写文件:     f = open("2.txt",'w')encoding='utf-8'     f.write("Hello World!")     f.close() 代码: class File():     ENCODING = "utf-8"     def wi

python文件管理小计

1.读取只当路径下所有文件和文件夹 import os def file_name(file_dir): for root, dirs, files in os.walk(file_dir): print(root) #当前目录路径(列表) print(dirs) #当前路径下所有子目录(列表) print(files) #当前路径下所有非目录子文件(列表) 原文地址:https://www.cnblogs.com/cdp1591652208/p/10514447.html

第六章、Python文件操作

第六章.Python文件操作 Python可以对文件进行查看.创建等功能,可以对文件内容进行添加.修改.删除,且所使用到的函数在Python3.5.x为open,在Python2.7.x同时支持file和open,但是在3.5.x系列移除了file函数. 一.Python文件打开方式 文件句柄 = open('文件路径','打开模式') Nginx_Conf = open('nginx.conf','r',encoding='utf-8') Ps:文件句柄相当于于变量名,文件路径可以写为绝对路径

Python标准库04 文件管理 (部分os包,shutil包)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令.Python标准库则允许我们从Python内部管理文件.相同的目的,我们有了两条途径.尽管在Python调用标准库的方式不如操作系统命令直接,但有它自己的优势.你可以利用Python语言,并发挥其他Python工具,形成组合的文件管理功能.Python or Shell? 这是留给用户的选择.本文

python的文件管理

1.seek(offset,where) where=0,1从当前位置移动,2从结束位置移动 当有换行时,会被截断.seek()无返回值,值为None 2.tell() 文件的当前位置,tell是获得文件指针位置,受seek,readline,read,readlines影响,不受truncate影响 3.truncate(n) 从文件的首行首字符开始截断,截断文件为n个字符:无n表示从当前位置起截断:截断之后n后面的所有字符被删除 4.readline(n) 读入若干行,n表示读入的最长字节数

Python -- 标准库 文件管理 (部分os包,shutil包)

在操作系统下,用户可以通过操作系统的命令来管理文件,参考linux文件管理相关命令.Python标准库则允许我们从Python内部管理文件.相同的目的,我们有了两条途径.尽管在Python调用标准库的方式不如操作系统命令直接,但有它自己的优势.你可以利用Python语言,并发挥其他Python工具,形成组合的文件管理功能.Python or Shell? 这是留给用户的选择.本文中会尽量将两者相似的功能相对应. 本文基于linux文件管理背景知识 os包 os包包括各种各样的函数,以实现操作系统

python学习笔记(28)文件管理

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 原链:http://www.cnblogs.com/vamei/archive/2012/09/14/2684775.html 笔记:学的越来越多,是不是忘得也越来越多 #第n讲 文件管理 ''' 文件管理的功能命令基于linux 的文件管理功能 ls rename 不得不说,linux 的基础命令真的很通用 linux 基础命令 . 指向当前目录 .. 指向父目录 文件附加信息

Python学习笔记11:标准库之文件管理

1 os包 os包包括各种各样的函数,以实现操作系统的许多功能.这个包非常庞杂.os包的一些命令就是用于文件管理. 我们这里列出最常用的: mkdir(path) 创建新目录,path为一个字符串,表示新目录的路径.相当于$mkdir命令 比如说我们要新建目录new: import os os.mkdir('/home/Document/new') rmdir(path) 删除空的目录,path为一个字符串,表示想要删除的目录的路径.相当于$rmdir命令 listdir(path) 返回目录中

马哥2016全新Linux+Python高端运维班-Linux基础命令文件管理类及目录创建

周二作业内容: 1.Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示. 文件管理类命令:cp(复制),mv(移动),rm(删除) 1) cp:   cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY cp [OPTION]... -t DIRECTORY SOURCE... cp SRC DEST 如果目标不存在,新建DEST,并将SRC中的内容填充至DEST 如果目录存在 如果DEST是文件