os模块学习(转)
python 文件操作
一、python中文件管理
文件管理是很多应用程序的基本功能和重要组成部分。Python可以使文件管理极其简单,特别是和其它语言相对比。
1.介绍
几乎以任何语言编写的众多应用程序中,文件管理是很重要的一部分。Python当然也不例外。在这篇文章中,我们将探究如何使用一些模块来操作文件。我们会完成读文件,写文件,增加文件内容的操作,写文件,增加文件内容的操作,还有一些另类的用法。
2.文件读写
最简单文件操作--读取
1 FileRead = open("test.txt",'r')
2 FileRead.read() #读取文件所有内容,使用print(FileRead.read())函数输出文件内容
3 FileRead.close()

1 FileRead = open("test.txt",'r')
2 for lines in FileRead.readlines():
3 print("lines:",lines.strip('\n'))
4 FileRead.close()
5
6 #输出结果
7 lines: Hello World
8 lines: Welcome To Beijing

1 FileRead = open("test.txt",'r')
2 print(FileRead.readline().strip('\n')) #读取第一行数据
3 print(FileRead.readline().strip('\n')) #读取第二行数据
4 FileRead.close()
1 FileRead = open("test.txt",'r')
2 print(FileRead.readline().strip('\n')) #读取第一行数据
3 FileRead.seek(0) #将上次读取的位置调回到首行位置
4 print(FileRead.readline().strip('\n')) #读取第一行数据
5 FileRead.close()
1 FileRead = open("test.txt",'r')
2 print(FileRead.readline().strip('\n')) #读取第一行数据
3 print(FileRead.tell()) #获取python所在文件中的当前位置
4 print(FileRead.readline().strip('\n')) #读取第二行数据
5 FileRead.close()
初级操作--写数据到文件
1 FileRead = open("test.txt",'w') #‘w’--是指文件将被写入数据,已有的数据将会被清空
2 FileRead.write('Hello Everybody!\nWelcome To China!') #被写入文件的数据,使用‘\n’可以实现换行操作
3 FileRead.close() #关闭文件句柄,每次读写文件都应该在最后面将文件关闭
1 FileRead = open("test.txt",'a') #‘a’--是指文件将被写入数据,已有的数据不会被清空,在已有数据后面追加下面要添加的数据
2 FileRead.write('Hello Everybody!\nWelcome To China!') #被写入文件的数据,使用‘\n’可以实现换行操作
3 FileRead.close() #关闭文件句柄,每次读写文件都应该在最后面将文件关闭
文件的高级操作--‘rb’ 'wb'--使用此模式打开文件是读写二进制文件
二、从现有文件中获取数据
使用Python中的模块,可以从现有文件中获取信息。使用“os”模块和“stat”模块可以获取文件的基本信息:

1 #!/usr/local/env python3
2 '''
3 Author:@南非波波
4 Blog:http://www.cnblogs.com/songqingbo/
5 E-mail:qingbo.song@gmail.com
6 '''
7 import os
8 import stat
9 import time
10 FileStats = os.stat('test.txt') #获取文件的基本信息
11 FileInfo = {
12 'Size' : FileStats [ stat.ST_SIZE ], #文件大小
13 'LastModified' : time.ctime(FileStats[ stat.ST_MTIME]),
14 'LastAccessed' : time.ctime(FileStats[stat.ST_ATIME]),
15 'CreationTime' : time.ctime(FileStats[stat.ST_CTIME]),
16 'Mode' : FileStats [ stat.ST_MODE ]
17 }
18 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)
19 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'}

判断文件是不是目录

1 #!/usr/local/env python3
2 '''
3 Author:@南非波波
4 Blog:http://www.cnblogs.com/songqingbo/
5 E-mail:qingbo.song@gmail.com
6 '''
7 import os
8 import stat
9 import time
10 def DirIf(FilenName):
11 FileStats = os.stat(FilenName) #获取文件的基本信息
12 FileInfo = {
13 'Size' : FileStats [ stat.ST_SIZE ], #文件大小
14 'LastModified' : time.ctime(FileStats[ stat.ST_MTIME]),
15 'LastAccessed' : time.ctime(FileStats[stat.ST_ATIME]),
16 'CreationTime' : time.ctime(FileStats[stat.ST_CTIME]),
17 'Mode' : FileStats [ stat.ST_MODE ]
18 }
19 if stat.S_ISDIR( FileStats[ stat.ST_MODE ] ): #判断文件是不是目录
20 return True
21 else:
22 return False

1
2
3
4
|
if DirIf( 'test.txt' ) = = True : print ( "目录" ) elif DirIf( 'test.txt' ) = = False : print ( '非目录' ) |
判断文件类型

1 #!/usr/local/env python3
2 '''
3 Author:@南非波波
4 Blog:http://www.cnblogs.com/songqingbo/
5 E-mail:qingbo.song@gmail.com
6 '''
7 import os
8 import stat
9
10 FileStats = os.stat('test.txt')
11 FileMode = FileStats[stat.ST_MODE]
12 if stat.S_ISREG(FileStats[stat.ST_MODE]): #普通文件判断
13 print('Regular file.')
14 elif stat.S_ISDIR(FileStats[stat.ST_MODE]): #目录文件判断
15 print('Directory.')
16 elif stat.S_ISLNK(FileStats[stat.ST_MODE]): #快捷方式(链接)文件
17 print('Shortcut.')
18 elif stat.S_ISSOCK(FileStats[stat.ST_MODE]): #套接字文件
19 print('Socket.')
20 elif stat.S_ISFIFO(FileStats[stat.ST_MODE]): #命名管道文件
21 print('Named pipe.')
22 elif stat.S_ISBLK(FileStats[stat.ST_MODE]): #块设备文件
23 print('Block special device.')
24 elif stat.S_ISCHR(FileStats[stat.ST_MODE]): #特殊字符型文件
25 print('Character special device.')


1 import os.path
2
3 FileStats = 'test.txt'
4 if os.path.isdir(FileStats): #判断文件是否是目录
5 print('Directory.')
6 elif os.path.isfile(FileStats): #判断文件是否是文件
7 print('File.')
8 elif os.path.islink(FileStats): #判断文件是否是快捷方式(链接)文件
9 print('Shortcut.')
10 elif os.path.ismount(FileStats): #判断文件是否是挂载文件
11 print('Mount point.')

获取文件中的行数

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

三、python对目录的操作
和普通文件一样,关于目录的操作也很容易掌握。首先,列出一个目录的内容:
1 import os
2 for fileName in os.listdir ( '/' ):
3 print(fileName)
创建目录
1
2
|
import os os.mkdir( 'testDir' ) |
创建多级目录
1
2
|
import os os.makedirs( 'testDir/test2/test3/test4' ) #os.makedirs() |
删除多级空目录
1
2
|
import os os.removedirs( 'testDir/test2/test3/test4' ) |
删除目录
1
2
|
import os os.rmdir( 'testDir' ) |
四、python对特定类型的文件进行操作
使用fnmatch模块显示'.txt'和'.exe'文件名

1 import fnmatch
2 import os
3 for FileName in os.listdir('/'):
4 if fnmatch.fnmatch(FileName,'*.txt'):
5 print(open(FileName).read())
6 elif fnmatch.fnmatch(FileName,'*.exe'):
7 print(FileName)

“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
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
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
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import pickle
FileHandle = open('PickleFile.txt','rb') #注意要加'b'进行二进制读写操作,否则报错
TestList = pickle.load(FileHandle)
print(TestList)
FileHandle.close()

错误
1
2
|
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
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
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
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import StringIO FileHandle = StringIO.StringIO("Let freedom ring") #创建的文件存在内存中
print(FileHandle.read()) # "Let freedom ring."
FileHandle.close()


#!/usr/local/env python2
'''
Author:@南非波波
Blog:http://www.cnblogs.com/songqingbo/
E-mail:qingbo.song@gmail.com
'''
import cStringIO FileHandle = cStringIO.cStringIO("Let freedom ring") #创建的文件存在内存中
print(FileHandle.read()) # "Let freedom ring."
FileHandle.close()

总结:
文件管理,是众多编程语言的程序员在编写应用程序是经常遇到的问题。幸好,和其它语言相比,Python使其出乎意料地容易。Python的标准库中提供了许多相关的模块帮助程序员解决这方面的问题,而它的面向对象的机制也简化了操作。
原文链接:http://blog.csdn.net/wwwjfy/article/details/2575942
os模块学习(转)的更多相关文章
- os模块学习小随笔
os模块为python解释器与操作系统交互的接口 os.popen() -------Open a pipe to or from command. The return value is an ...
- python os模块学习
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的. 二.常用方法 1.os.name 输出字符串指示正在使用的平台.如果是wi ...
- os模块学习+open行数
os模块的使用https://www.cnblogs.com/juandx/p/4962089.html 注意:新建和关闭文件,可以直接用,无需os模块 python中对文件.文件夹(文件操作函数)的 ...
- day5模块学习 -- os模块学习
python基础之模块之os模块 os模块 os模块的作用: os,语义为操作系统,所以肯定就是操作系统相关的功能了,可以处理文件和目录这些我们日常手动需要做的操作,就比如说:显示当前目录下所有文件/ ...
- OS模块学习
import os,sys s = os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径 # print(s) # os.chdir('..') #改变当前工作目录 # s ...
- pythone函数基础(7)第三方模块学习
一,time模块学习 import time # print(int(time.time()))#时间戳# res = time.strftime('%Y-%m-%d %H:%M:%S')#取当前格式 ...
- day5模块学习 -- time、datetime时间模块
1.定义 模块:用来从逻辑上组织python(变量,函数,类,逻辑:实现一个功能)代码,本质就是.py结尾的python文件(文件名:test.py,对应的模块名test) 包:用来从逻辑上组织模块的 ...
- Python 模块学习:os模块
一.os模块概述 Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话,这个模块是尤为重要的.(一语中的) 二.常用方法 1.os.name 输出字符串指示正在使用的平台 ...
- Python学习总结13:os模块
os模块包含普遍的操作系统功能,与具体的平台无关.常用于处理文件和目录这些我们日常手动需要做的操作. 1. os模块函数汇总 1) os.name():判断现在正在实用的平台,Windows 返回 ‘ ...
随机推荐
- 20172330 2017-2018-1 《Java程序设计》第四周学习总结
20172330 2017-2018-1 <Java程序设计>第四周学习总结 教材学习内容总结 这一周的内容还是比较多的,而且很复杂,包含第四和第七章. 第四章向我们介绍了类结构的定义与概 ...
- 导弹拦截与Dilworth定理
这两天被Dilworth.链和反链搞到头昏脑胀,终于有点眉目,现在来总结一下. Dilworth定理说的是:对于一个偏序集,其最少链划分数等于其最长反链的长度. Dilworth定理的对偶定理说的是: ...
- Java 二维数组
在 Java 中,二维数组与一维数组一样,但是不同于 C 中的二维数组: 1. 在 Java 中,二维数组可以看成是以数组为元素的数组,例如: int a[][] = {{1,2},{3,4,5,6 ...
- lintcode-178-图是否是树
178-图是否是树 给出 n 个节点,标号分别从 0 到 n - 1 并且给出一个 无向 边的列表 (给出每条边的两个顶点), 写一个函数去判断这张`无向`图是否是一棵树 注意事项 你可以假设我们不会 ...
- RXSwift--登录注册那点事
在iOS学习中登录注册是一个万能的可以拿出来实战的demo.接下来我们就从登录开始入手,PS:如果你对RXSwift中的概念和一些常用的函数不清楚可以参考这篇文章(可能打开比较慢请耐心等待).开始直接 ...
- web前端之路 - 开篇
一 web发展历程 了解事物的历史有助于我们渐进式的从发展的思路清楚了解事物的来龙去脉. 这里有一篇网文写得比较清晰和完整:https://www.tianmaying.com/tutorial/we ...
- %pylab ipython 中文
格式:%pylab [--no-import-all] [gui] 该命令会在ipython或notebook环境中自动加载numpy和matplotlib库,跟以下语句功能一致 import num ...
- bzoj1069-最大土地面积
题目 给定\(n\ (n\le 2000)\)个坐标,求四个坐标使得围起来的四边形面积最大. 分析 最暴力的想法是枚举四个点,然而肯定超时.接着不知道怎么想到中途相遇,然而一点关系都没有.这里用到了一 ...
- 【hdu3555】Bomb 数位dp
题目描述 求 1~N 内包含数位串 “49” 的数的个数. 输入 The first line of input consists of an integer T (1 <= T <= 1 ...
- NOIP1998 提高组
[NOIP2002] 提高组 T2.联接数 算法:贪心+字符串处理 [问题分析]: 按整数对应的字符串大到小连接,因为题目的例子都符合,但是不难找到反例:12 121 应该组成12121而非121 ...