Python文件和目录操作详解


Posted in Python onFebruary 08, 2015

一、文件的打开和创建

1、打开

open(file,mode):
>>>fo = open('test.txt', 'r')

>>>fo.read()

'hello\n'

>>>fo.close()

file(file,mode):
>>>f = file('test.txt', 'r')

>>>f.read()

'hello\n'

>>>f.close()

mode可取值:

Python文件和目录操作详解

2、创建

用w/w+/a/a+模式打开即可。

二、文件的读取
1、String = FileObject.read([size])

>>> fr = open('test.txt')

>>> fr.read()

'hello\nworld\n'

or:
>>> for i in open('test.txt'):

...     print i

... 

hello
world

2、String = FileObject.readline([size])
>>> f = open('test.txt')

>>> f.readline()

'hello\n'

>>> f.readline()

'world\n'

>>> f.readline()

''

或者可以用next

3、List = FileObject.readlines([size])

>>> f = open('test.txt')

>>> f.readlines()

['hello\n', 'world\n']

三、文件的写入

1、write(string)

>>> f = open('test.txt', 'a')

>>> f.write('hello\nworld')
#'hello\nworld'

2、writelines(list)

>>> l = ['a','b','c']

>>> f=open('test.txt','a')

>>> f.writelines(l)
#'hello\nworldabc'

注:writelines相当于调用了多次write,不会自动添加换行(\n)符

四、内容查找替换

1、FileObject.seek(offset, mode)

offset:偏移量

mode:
0表示将文件指针指向从文件头部到“偏移量”字节处,
1表示将文件指针指向从文件当前位置向后移动“偏移量”字节,
2表示将文件指针指向从文件尾部向前移动“偏移量”字节。

>>> f=open('test.txt')

>>> f.read()

'hello\nworldabc'

>>> f.read()

''

>>> f.seek(0,0)

>>> f.read()

'hello\nworldabc'

>>> f.close()

2、flush:提交更新,即在文件关闭之前把内存中的内容强制写入文件(一般是文件关闭后写入)

3、文件查找:遍历行进行查找

#!/usr/bin/python

import re
search='hello world'

file='test.txt'

count = 0

f = open(file)

for l in f.readlines():

    li = re.findall(search,l)

    if len(li) > 0:

        count += len(li)

print "Search " + str(count) + " \"" + search + "\""

f.close()

4、文件内容替换:遍历行进行替换

替换到新文件demo:

#!/usr/bin/python
os='hello'

of='test.txt'
rs='ten'

rf='test2.txt'
ofh = open(of)

newl=[]

for l in ofh.readlines():

    nl = l.replace(os,rs)

    newl.append(nl)
rfh = open(rf,'w+')

rfh.writelines(newl)

ofh.close()

rfh.close()

替换到原文件demo:
[server@localserver file]$ cat test.txt 

abc

hello

world

hello world

helloworld

hello hello world

[server@localserver file]$ cat fr.py 

#!/usr/bin/python
os='hello'

file='test.txt'
rs='ten'
f = open(file, 'r+')

s=f.read()

f.seek(0,0)

f.close()

f = open(file, 'w+')

f.write(s.replace(os,rs))

f.close()

[server@localserver file] python fr.py

[server@localserver file]$ cat test.txt 

abc

ten

world

ten world

tenworld

ten ten world

这里采用了重建文件的办法。

或用 fileinput 模块直接在原文件上修改:

#!/usr/bin/python

import fileinput
os='hello'

file='test.txt'
rs='ten'
for line in fileinput.input(file, inplace=True):

    print line.replace(os,rs).replace('\n','')

注意,这里删除了\n是因为print时会写入换行。

五、文件及目录操作

一般是借助OS模块实现

1、mkdir(path[,mode=0777]):创建目录,相当于mkdir

>>>import os

>>>os.mkdir('tt')

2、makedirs(name[, mode=511]):创建多级目录,相当于mkdir -p

3、rmdir(path):删除目录,相当于rm

4、removedirs(path):删除多级目录,相当于rm -rf

5、listdir(path):列出目录中文件和文件夹,相当于ls

6、getcwd():获取当前路径,相当于pwd

7、chdir(path):切换目录,相当于cd

8、rename(src, dst):重命名

9、shutil.copyfile(str,dst):复制文件(要引入shutil模块)

10、path.splitext(filename):获取文件路径和扩展名

>>> import os

>>> fileName, fileExtension = os.path.splitext('/path/to/somefile.ext')

>>> fileName

'/path/to/somefile'

>>> fileExtension

'.ext'

11、walk(top, topdown=True, onerror=None):遍历目录

>>> import os

>>> g = os.walk('a')

>>> g.next()

('a', ['b'], [])

>>> g.next()

('a/b', ['f', 'c'], [])

>>> g.next()

('a/b/f', [], ['3.txt'])

>>> g.next()

('a/b/c', ['d', 'e'], [])

>>> g.next()

('a/b/c/d', [], ['1.txt'])

>>> g.next()

('a/b/c/e', [], ['2.txt'])

walk返回的是一个生成器,生成器中的内容是:当前目录,目录列表,文件列表

python自己递归实现文件遍历:

#!/usr/bin/python

import os
def dirList(path):

    filelist = os.listdir(path)

    fpath = os.getcwd()

    allfile = []

    for filename in filelist:

        filepath = os.path.abspath(os.path.join(path, filename))

        if os.path.isdir(filepath):

            allfile.extend(dirList(filepath))

        else:

            allfile.append(filepath)

    return allfile
files = dirList('a')

print files
Python 相关文章推荐
Python判断两个对象相等的原理
Dec 12 Python
python OpenCV学习笔记实现二维直方图
Feb 08 Python
遗传算法python版
Mar 19 Python
Django Sitemap 站点地图的实现方法
Apr 29 Python
Django自定义用户登录认证示例代码
Jun 30 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
python3 实现函数写文件路径的正确方法
Nov 27 Python
简单了解python filter、map、reduce的区别
Jan 14 Python
dpn网络的pytorch实现方式
Jan 14 Python
tensorflow实现在函数中用tf.Print输出中间值
Jan 21 Python
Python守护进程实现过程详解
Feb 10 Python
浅谈python处理json和redis hash的坑
Jul 16 Python
Python中操作MySQL入门实例
Feb 08 #Python
Python Web框架Flask下网站开发入门实例
Feb 08 #Python
Python中使用wxPython开发的一个简易笔记本程序实例
Feb 08 #Python
Python常用的日期时间处理方法示例
Feb 08 #Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 #Python
Python中解析JSON并同时进行自定义编码处理实例
Feb 08 #Python
Python Web框架Flask中使用七牛云存储实例
Feb 08 #Python
You might like
Terran剧情介绍
2020/03/14 星际争霸
php递归函数中使用return的注意事项
2014/01/17 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
2015/11/05 PHP
分享PHP守护进程类
2015/12/30 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
2020/01/04 PHP
游戏人文件夹程序 ver 4.03
2006/07/14 Javascript
js 禁用只读文本框获得焦点时的退格键
2010/04/25 Javascript
JSQL 批量图片切换的实现代码
2010/05/05 Javascript
把input初始值不写value的具体实现方法
2013/07/04 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP详解
2015/03/05 Javascript
jQuery实现点击小图显示大图代码分享
2015/08/25 Javascript
详解JavaScript中的4种类型识别方法
2015/09/14 Javascript
jquery利用拖拽方式在图片上添加热链接
2015/11/24 Javascript
jQuery实现伪分页的方法分享
2016/02/17 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
D3.js实现折线图的方法详解
2016/09/21 Javascript
有关文件上传 非ajax提交 得到后台数据问题
2016/10/12 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
Vue中的基础过渡动画及实现原理解析
2018/12/04 Javascript
python实现360的字符显示界面
2014/02/21 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
pyQt4实现俄罗斯方块游戏
2018/06/26 Python
Python基于分析Ajax请求实现抓取今日头条街拍图集功能示例
2018/07/19 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
使用python实现学生信息管理系统
2021/02/25 Python
西班牙Polo衫品牌:Polo Club
2020/08/09 全球购物
美丽家庭事迹材料
2014/05/03 职场文书
加强干部作风建设整改方案
2014/10/24 职场文书
教师工作能力自我评价
2015/03/04 职场文书
董事长助理工作总结2015
2015/07/23 职场文书