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 httplib,smtplib使用方法
Sep 06 Python
python使用reportlab画图示例(含中文汉字)
Dec 03 Python
Python中的jquery PyQuery库使用小结
May 13 Python
Python脚本实现下载合并SAE日志
Feb 10 Python
python中PIL安装简单教程
Apr 21 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
详谈Numpy中数组重塑、合并与拆分方法
Apr 17 Python
Python操作rabbitMQ的示例代码
Mar 19 Python
django 数据库连接模块解析及简单长连接改造方法
Aug 29 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
python字典与json转换的方法总结
Dec 28 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 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
一拳超人中怪人协会钦定! S级别最强四人!
2020/03/02 日漫
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP伪静态Rewrite设置之APACHE篇
2014/07/30 PHP
ThinkPHP 表单自动验证运用示例
2014/10/13 PHP
PHP实现的多文件上传类及用法示例
2016/05/06 PHP
php通过两层过滤获取留言内容的方法
2016/07/11 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
2017/09/16 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
初学Javascript的一些总结
2008/11/03 Javascript
兼容ie和firefox js关闭代码
2008/12/11 Javascript
jQuery 1.3 和 Validation 验证插件1.5.1
2009/07/09 Javascript
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
javascript实现任务栏消息提示的简单实例
2016/05/31 Javascript
JS实现添加,替换,删除节点元素的方法
2016/06/30 Javascript
JS for...in 遍历语句用法实例分析
2016/08/24 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
JS实现复制功能
2017/03/01 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
[55:56]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.22
2019/09/05 DOTA
Python基于回溯法子集树模板解决野人与传教士问题示例
2017/09/11 Python
python模拟键盘输入 切换键盘布局过程解析
2019/08/15 Python
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
应届生法律顾问求职信
2013/11/19 职场文书
团日活动总结范文
2014/04/25 职场文书
入党介绍人评语
2014/05/06 职场文书
爱护公共设施标语
2014/06/24 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
祖国在我心中演讲稿450字
2014/09/05 职场文书
《猴王出世》教学反思
2016/02/23 职场文书
对Keras自带Loss Function的深入研究
2021/05/25 Python
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis