Python入门笔记(16):对文件的操作(2)
一、文件系统
从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。
Python对文件系统的操作是通过os模块实现。提供了访问操作系统功能的接口,但是这个os模块只是一个伪文件系统操作,真正的“模块”如,dos,os2等,这些是直接的底层工作,而Python的os模块只是一种借用操作(个人理解)
os.path模块可对路径进行相关操作。
os、os.path这两个模块与平台、操作系统无关。
二、os模块的文件/目录访问函数
| 函数 | 描述 |
|---|---|
| 文件处理 | |
| mkfifo()/mknod() | 创建命名管道/创建文件系统节点 |
| remove(path)/unlink(path) | 删除文件 如:os.remove('d:\\b.png') |
| rename(old, new)/renames(old, new) | 重命名文件:如:os.rename('d:\\b.png','d:\\a.png') |
| stat(path) | 返回文件信息:
>>> os.stat('d:\\a.png')
(33206, 0L, 0, 0, 0, 0, 4088L, 1372746141, 1372734171, 1372746141)
>>>
|
| symlink() | 创建符号链接 |
| utime() | 更新时间戳 |
| tmpfile() | 创建并打开('w+b')一个新的临时文件,注意不含参数,一旦执行则创建一个临时文件,类型未知
>>> os.tmpfile()#创建临时文件
<open file '<tmpfile>', mode 'w+b' at 0x011D4BF0>
>>> os.rename('d:\\t58g.2','d:\\abc.txt')#改成txt
|
| walk(top, topdown, onerror) | 生成一个目录树下所有文件名 |
| 目录/文件夹 | |
| chdir(path) | 改变当前工作目录 |
| listdir(path) | 列出指定目录文件
>>> os.listdir('d:\\')
['a.png', 'abc.txt', 'out.txt', 'Program Files', 'Python25', 'RECYCLER',]>>>
|
| getcwd()/getcwdu() | 返回当前目录:
>>> os.getcwd() 'D:\\Python25'>>> os.getcwdu()u'D:\\Python25 |
| mkdir(path)/makedirs(name, mode) | 创建目录/创建多层目录
>>> os.mkdir('D:\\file')
|
| rmdir(path)/removedirs(name) | 删除目录/删除多层目录 |
| 访问/权限 | |
| access(path, mode) | 验证权限目录 |
| chmod(path, mode) | 更改权限模式 |
| 文件描述符操作 | |
| open()、read()、write() | 见上一节 |
| dup()/dup2() | 复制 |
其他的见《Python 核心编程2》9.7节
应用:
(1):检查下磁盘中(D)是否有文件"BeginMan"的文件夹,如果存在则新建"SuperMan",
在该目录下创建一个名为"readme.txt"的文本文件,写入数据,然后输出文件内容
(2):如果文件夹BeginMan存在,则遍历该目录,并输入目录文件,
如果该目录下存在文件,且如果有文件名为b.png,则重命名为boy.png,移到D盘根目录下
(3):删除BeginMan目录下所有文件,只保留子目录
文件系统图如下:

D盘中并没有SuperMan的文件夹,这里程序如下:
#coding=utf-8
import os,shutil
import datetime
DIR = 'D:\\'
FILENAME = 'BeginMan'
PATH = 'D:\\%s' %FILENAME
CONTENT = """
(1):检查下磁盘中(D)是否有文件"BeginMan"的文件夹,如果存在则新建"SuperMan",\n
在该目录下创建一个名为"readme.txt"的文本文件,写入数据,然后输出文件内容\n
(2):如果文件夹BeginMan存在,则遍历该目录,并输入目录文件\n,
如果该目录下存在文件,且如果有文件名为b.png,则重命名为boy.png,移到D盘根目录下\n
(3):删除BeginMan目录下所有文件,只保留子目录
==============================================\n
时间:%s\n
作者:%s\n
""" %(datetime.datetime.now(),FILENAME)
if FILENAME in os.listdir(DIR):
print u'已经有同名文件:%s' %FILENAME
for obj in os.listdir(PATH):
print u'%s\\%s\n' %(PATH,obj)
try:
if os.path.isfile(u'%s\\%s' %(PATH,obj)):
if obj == 'b.png': #如果含有文件为b.png,则重命名为boy.png,移动到该目录上级
os.rename(u'%s\\%s' %(PATH,obj),u'%s\\%s' %(PATH,'boy.png'))
shutil.move(u'%s\\%s' %(PATH,'boy.png'), 'D:\\')
os.remove(u'%s\\%s' %(PATH,obj))#删除文件,只保留子目录
except Exception,e:
print 'The error:%s' %e
FILENAME = 'SuperMan'
os.mkdir('D:\\%s' %FILENAME) #创建目录
f = open('D:\\%s\\readme.txt'%FILENAME,'w' ) #在该目录下创建文件
f.write(CONTENT) #写入数据
f.close()
f = open('D:\\%s\\readme.txt'%FILENAME,'r' )
print [lines.strip() for lines in f] #输出
运行如下:

效果如下:



Python有关文件、文件夹操作小结:
import os,shutil #要用到这两个模块
创建文件:
1) os.mknod("test.txt") 创建空文件
2) open("test.txt",w) 直接打开一个文件,如果文件不存在则创建文件
创建目录:
os.mkdir("file") 创建目录
复制文件:
shutil.copyfile("oldfile","newfile") oldfile和newfile都只能是文件
shutil.copy("oldfile","newfile") oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
复制文件夹:
shutil.copytree("olddir","newdir") olddir和newdir都只能是目录,且newdir必须不存在
重命名文件(目录)
os.rename("oldname","newname") 文件或目录都是使用这条命令
移动文件(目录)
shutil.move("oldpos","newpos")
删除文件
os.remove("file")
删除目录
os.rmdir("dir") 只能删除空目录
shutil.rmtree("dir") 空目录、有内容的目录都可以删
转换目录
os.chdir("path") 换路径
判断目标
os.path.exists("goal") 判断目标是否存在
os.path.isdir("goal") 判断目标是否目录
os.path.isfile("goal") 判断目标是否文件 参考:http://www.cnblogs.com/phoebus0501/archive/2011/01/19/1939646.html
三、os.path
如下表:
| 函数 | 描述 |
|---|---|
| 分隔 | |
| basename(p) | 去掉目录路径, 返回文件名:
os.path.basename('D:\\Project\\python25\\Lib\\a.txt') #a.txt
|
| dirname(p) | 去掉文件名, 返回目录路径:
os.path.dirname(D:\\Project\\python25\\Lib\\a.txt) #D:\Project\python25\Lib |
| join() | 将分离的各部分组合成一个路径名:Django项目中常用,
settings.py
DIRNAME = os.path.dirname(__file__)
TEMPLATE_DIRS = (
os.path.join(DIRNAME, "themes"),
)
|
| split() | 返回 (dirname(), basename()) 元组:
>>>DIRNAME = 'D:\\Project\\python25\\Lib\\a.txt'
>>>os.path.split(DIRNAME)
('D:\\Project\\python25\\Lib', 'a.txt')
|
| splitdrive() | 返回 (drivename, pathname) 元组:
os.path.splitdrive(DIRNAME)
#('D:', '\\Project\\python25\\Lib\\a.txt')
|
| splitext() | 返回 (filename, extension) 元组
os.path.splitext(DIRNAME)
#('D:\\Project\\python25\\Lib\\a', '.txt')
|
| 信息 | |
| getatime(filename) | 返回最近访问时间:
gTime = os.path.getatime(os.getcwd())
print gTime #1372836299.77
tTime = time.localtime(gTime)
print time.strftime('%Y-%m-%d %H:%M:%S',tTime) #2013-07-03 15:24:59
|
| getctime(filename) | 返回文件创建时间:
cTime = os.path.getctime(os.getcwd())
c_time = time.localtime(cTime)
print time.strftime('%Y-%m-%d %H:%M:%S',c_time) #2013-04-17 17:27:46
|
| getmtime(filename) | 返回最近文件修改时间 |
| getsize(filename) | 返回文件大小(以字节为单位) |
| 查询 | |
| exists() | 指定路径(文件或目录)是否存在 |
| isabs() | 指定路径是否为绝对路径 |
| isdir() | 指定路径是否存在且为一个目录 |
| isfile() | 指定路径是否存在且为一个文件 |
| islink() | 指定路径是否存在且为一个符号链接 |
|
ismount() samefile() |
指定路径是否存在且为一个挂载点 两个路径名是否指向同个文件 |
Python入门笔记(16):对文件的操作(2)的更多相关文章
- Python入门笔记(15):对文件的操作(1)
一.文件对象 我理解的文件对象就是一个接口,通过这个接口对文件进行相关操作. <Python 核心编程>上说的很晦涩,这里没有深刻理解到,希望有人能解释给我听. >>> ...
- python入门学习:9.文件和异常
python入门学习:9.文件和异常 关键点:文件.异常 9.1 从文件中读取数据9.2 写入文件9.3 异常9.4 存储数据 9.1 从文件中读取数据 9.1.1 读取整个文件 首先创建一个pi_ ...
- golang学习笔记16 beego orm 数据库操作
golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...
- python学习笔记(十)、文件操作
在前面我们了解到了没得模块,其中有一个模块为fileinput,为文件操作模块,不知道小伙伴们是否还记得? 1 打开文件 要打开文件,可以使用fileinput中的fileinput.input函数进 ...
- Ruby小白入门笔记之 <Gemfile 文件>
因为初学Ruby,四处查资料无果,才来的贴出亲自试过的操作,覆盖整个个人入门笔记博客中,故所有的操作,都以最明了的方式阐述,当你创建完一个新的Rails应用后,你发现JAVA中我们可以编写maven聚 ...
- Python入门笔记(23):模块
一.模块基础 1.模块 自我包含,且有组织的代码片段就是模块 模块是Pyhon最高级别的程序组织单元,它将程序代码和数据封装起来以便重用.实际的角度,模块往往对应Python程序文件. 每个文件都是一 ...
- Python学习笔记3-文件的简单操作
Python中的文件操作 Python中文件打操作离不开两个模块 os 和 shutil os:操作文件.目录: Python os模块包含普遍的操作系统功能.如果你希望你的程序能够与平台无关的话, ...
- Python学习笔记之从文件中读取数据
10-1 Python 学习笔记:在文本编辑器中新建一个文件,写几句话来总结一下你至此学到的Python 知识,其中每一行都以“In Python you can”打头.将这个文件命名为learnin ...
- python编辑修改haproxy配置文件--文件基础操作
一.需求分析 有查询,删除,添加的功能 查询功能:查询则打印查询内容,如果不存在也要打印相应的信息 删除功能:查询到要删除内容则删除,打印信息. 添加功能:同上. 二.流程图 三.代码实现 本程序主要 ...
随机推荐
- 网站用域名能访问,用域名IP不能访问的原因分析
原因分析:一般虚拟主机是不能直接输入IP进行访问的 因为一个IP下有很多网站 ,只能用域名进行访问.如果想IP也能访问,必须网站有独立的IP地址,不是共享IP.如果是IIS的话,要把主机头对应的域名去 ...
- Akismet API 密钥(key)免费获取方法
Akismet插件是用户使用最广泛的垃圾评论插件,也是wordpress的创始人制作的,同时它也毫无疑问的成为wordpress的默认安装插件,这样的插件可以帮助用户解决垃圾评论的烦恼,而且也不用访客 ...
- chrome start.js报错
是由 chrome 插件 “电脑管家广告过滤” 引起的 并且,在用户电脑上还出现了这个插件拦截正常请求的情况 如果同时报以下错误: Uncaught TypeError: Cannot read pr ...
- vim中多标签和多窗口的使用
用vim进行编辑的时候常常因为要编辑多个文件或者是编辑一个文件要参考其他文件而烦恼,这里介绍两种方法: 1.多标签 直接在编辑的时候输入: vim -p 要编辑的文件名 如vim -p * 就是编辑当 ...
- 【Cocos2d-Js基础教学(7)界面UI更新方法(会用到第三方类库)】
我们游戏中会遇到很多UI更新的时候,大部分时候我们会remove该节点,再重新绘制的方法来进行UI更新. 但是这种更新效率并不高,这里我推荐大家一个第三方的库,来通过注册更新的方式来对UI进行更新管理 ...
- Xcode8新特性和iOS10新特性
从 Xcode 8.0 开始,目前所有的插件都无法工作! NSLog 无法输出 -- 此bug等待正式版本... Xcode 提供了文档注释快捷键option + cmd + / 但是要把系统升级到1 ...
- JavaMelody应用监控使用指南
原文链接:http://www.cnblogs.com/xing901022/p/4116430.html 前言 本文参考JavaMelody的UserGuide编写,部分文字均来自文档,添加有个人理 ...
- 一些常用的Git命令
1 删除文件 $ git rm filename 从已跟踪文件清单中移除,并连带从工作目录中删除指定的文件. 删除后,有2种选择: (1)如果确实要删除,则使用git commit提交. (2)如果不 ...
- WPF之DataGrid
1.WPF 4 DataGrid 控件(基本功能篇) 基本使用,绑定数据展示 2.WPF 4 DataGrid 控件(自定义样式篇) 定义行,列,头,单元格等样式 3.WPF 4 DataGrid 控 ...
- 【Xamarin报错】 COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java heap space
Xamarin Android 编译报错: COMPILETODALVIK : UNEXPECTED TOP-LEVEL error java.lang.OutOfMemoryError: Java ...
