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_脚本CGI、特点、应用、开发环境(详解)
May 23 Python
用python的requests第三方模块抓取王者荣耀所有英雄的皮肤实例
Dec 14 Python
Python基于ThreadingTCPServer创建多线程代理的方法示例
Jan 11 Python
python opencv实现任意角度的透视变换实例代码
Jan 12 Python
详解TensorFlow查看ckpt中变量的几种方法
Jun 19 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
python使用xlrd模块读取xlsx文件中的ip方法
Jan 11 Python
Python3 执行系统命令并获取实时回显功能
Jul 09 Python
使用Python的datetime库处理时间(RPA流程)
Nov 24 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
jupyter notebook更换皮肤主题的实现
Jan 07 Python
Python 数据可视化工具 Pyecharts 安装及应用
Apr 20 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
收音机频率指针指示不准确和灵敏度低问题
2021/03/02 无线电
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
PHP使用redis位图bitMap 实现签到功能
2019/10/08 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
JQuery小知识
2010/10/15 Javascript
基于Jquery的将DropDownlist的选中值赋给label的实现代码
2011/05/06 Javascript
JS定时关闭窗口的实例
2013/05/22 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
使用JavaScript获取Request中参数的值方法
2016/09/27 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
使用travis-ci如何持续部署node.js应用详解
2017/07/30 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
2020/11/02 Javascript
js实现缓动动画
2020/11/25 Javascript
[50:02]完美世界DOTA2联赛循环赛 Magma vs IO BO2第一场 11.01
2020/11/02 DOTA
使用python绘制常用的图表
2016/08/27 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
python画图系列之个性化显示x轴区段文字的实例
2018/12/13 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
2019/10/21 Python
Python中bisect的使用方法
2019/12/31 Python
Python制作一个仿QQ办公版的图形登录界面
2020/09/22 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
KARATOV珠宝在线商店:俄罗斯珠宝品牌
2019/03/13 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
保健品市场营销方案
2014/03/31 职场文书
室内趣味活动方案
2014/08/24 职场文书
2015年度学校应急管理工作总结
2015/10/22 职场文书
SQLServer 日期函数大全(小结)
2021/04/08 SQL Server
MySQL Server层四个日志的实现
2022/03/31 MySQL