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中for语句简单遍历数据的方法
May 07 Python
python删除列表内容
Aug 04 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
Django 中使用流响应处理视频的方法
Jul 20 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Python中常用的8种字符串操作方法
May 06 Python
Python PyCharm如何进行断点调试
Jul 05 Python
Python3 chardet模块查看编码格式的例子
Aug 14 Python
IronPython连接MySQL的方法步骤
Dec 27 Python
Pandas实现一列数据分隔为两列
May 18 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
Django中使用Celery的方法步骤
Dec 07 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中的 == 运算符进行字符串比较
2006/11/26 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP 数据库树的遍历方法
2009/02/06 PHP
php实现扫描二维码根据浏览器类型访问不同下载地址
2014/10/15 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
深入解析PHP的Laravel框架中的event事件操作
2016/03/21 PHP
php+redis实现消息队列功能示例
2019/09/19 PHP
php设计模式之职责链模式定义与用法经典示例
2019/09/19 PHP
JavaScript XML实现两级级联下拉列表
2008/11/10 Javascript
jquery必须知道的一些常用特效方法及使用示例(整理)
2013/06/24 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
微信小程序 input输入框控件详解及实例(多种示例)
2016/12/14 Javascript
jQuery实现的简单无刷新评论功能示例
2017/11/08 jQuery
微信小程序实现打开内置地图功能【附源码下载】
2017/12/07 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
Element Popover 弹出框的使用示例
2020/07/26 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python开发之str.format()用法实例分析
2016/02/22 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
简单了解Django应用app及分布式路由
2019/07/24 Python
Python Opencv提取图片中某种颜色组成的图形的方法
2019/09/19 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
pip install命令安装扩展库整理
2021/03/02 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
2014年作风建设心得体会
2014/10/22 职场文书
2014年学校党建工作汇报材料
2014/11/02 职场文书
毕业典礼主持词
2015/06/29 职场文书
Redis数据同步之redis shake的实现方法
2022/04/21 Redis
MySQL查询日期时间
2022/05/15 MySQL