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代码检查工具pylint 让你的python更规范
Sep 05 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
Jan 04 Python
python绘制直方图和密度图的实例
Jul 08 Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
pyqt5、qtdesigner安装和环境设置教程
Sep 25 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
tensorflow 实现自定义梯度反向传播代码
Feb 10 Python
详解Python3中的 input() 函数
Mar 18 Python
详解Python中import机制
Sep 11 Python
Python存储读取HDF5文件代码解析
Nov 25 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
PHP源代码数组统计count分析
2011/08/02 PHP
神盾加密解密教程(二)PHP 神盾解密
2014/06/08 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
AJAX实现瀑布流触发分页与分页触发瀑布流的方法
2016/05/23 Javascript
微信小程序 加载 app-service.js 错误解决方法
2016/10/12 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
[35:39]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第二场 11.22
2020/11/24 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
Python中的异常处理学习笔记
2015/01/28 Python
python远程邮件控制电脑升级版
2019/05/23 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
印度排名第一的蛋糕、鲜花和礼品送货:Winni
2019/08/02 全球购物
公司活动邀请函
2014/01/24 职场文书
就职演讲稿范文
2014/05/19 职场文书
会计学毕业生求职信
2014/06/25 职场文书
植树节标语
2014/06/27 职场文书
2014年销售员工作总结
2014/12/01 职场文书
党员进社区活动总结
2015/05/07 职场文书
读后感怎么写?书写读后感的基本技巧!
2019/12/10 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
CSS3 天气图标动画效果
2021/04/06 HTML / CSS
将图片保存到mysql数据库并展示在前端页面的实现代码
2021/05/02 MySQL
Python实现天气查询软件
2021/06/07 Python
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers
Python+DeOldify实现老照片上色功能
2022/06/21 Python