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动态加载变量示例分享
Feb 17 Python
python通过pil将图片转换成黑白效果的方法
Mar 16 Python
十个Python程序员易犯的错误
Dec 15 Python
Python中字符串的修改及传参详解
Nov 30 Python
Python实现生成随机日期字符串的方法示例
Dec 25 Python
Anaconda下配置python+opencv+contribx的实例讲解
Aug 06 Python
Python3.4学习笔记之列表、数组操作示例
Mar 01 Python
django的聚合函数和aggregate、annotate方法使用详解
Jul 23 Python
原生python实现knn分类算法
Oct 24 Python
Python while true实现爬虫定时任务
Jun 08 Python
python利用蒙版抠图(使用PIL.Image和cv2)输出透明背景图
Aug 04 Python
Python pyecharts绘制条形图详解
Apr 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
详解PHP中foreach的用法和实例
2016/10/25 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
从零开始学习jQuery (四) jQuery中操作元素的属性与样式
2011/02/23 Javascript
让你的博客飘雪花超出屏幕依然看得见
2013/01/04 Javascript
javascript实现回车键提交表单方法总结
2015/01/10 Javascript
常用DOM整理
2015/06/16 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
mint-ui 时间插件使用及获取选择值的方法
2018/02/09 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
python 多进程通信模块的简单实现
2014/02/20 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
在Python中的Django框架中进行字符串翻译
2015/07/27 Python
Python实现采用进度条实时显示处理进度的方法
2017/12/19 Python
微信跳一跳自动运行python脚本
2018/01/08 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
关于python列表增加元素的三种操作方法
2018/08/22 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
python的命名规则知识点总结
2019/10/04 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Python调用.NET库的方法步骤
2019/12/27 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
django在开发中取消外键约束的实现
2020/05/20 Python
python怎么提高计算速度
2020/06/11 Python
Python3.9新特性详解
2020/10/10 Python
英国最大的宝石首饰超市:QP Jewellers
2018/09/23 全球购物
校园创业策划书
2014/01/14 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
《海伦?凯勒》教学反思
2014/04/17 职场文书
文明班集体申报材料
2014/05/23 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
员工手册董事长致辞
2015/07/29 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js