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内置函数dir详解
Apr 14 Python
Python2中的raw_input() 与 input()
Jun 12 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
Python重新加载模块的实现方法
Oct 16 Python
python实现自动登录后台管理系统
Oct 18 Python
python实现文件的备份流程详解
Jun 18 Python
Python的numpy库下的几个小函数的用法(小结)
Jul 12 Python
Django的models模型的具体使用
Jul 15 Python
基于matplotlib xticks用法详解
Apr 16 Python
Python实现一个优先级队列的方法
Jul 31 Python
python中str内置函数用法总结
Dec 27 Python
Django+Nginx+uWSGI 定时任务的实现方法
Jan 22 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 cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP可变函数的使用详解
2013/06/14 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
php header函数的常用http头设置
2015/06/25 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
laravel清除视图缓存的代码
2019/10/23 PHP
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
js实现iframe自动自适应高度的方法
2015/02/17 Javascript
简单谈谈Vue 模板各类数据绑定
2016/09/25 Javascript
移动端界面的适配
2017/01/11 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
基于JavaScript实现无限加载瀑布流
2017/07/21 Javascript
JS实现浏览上传文件的代码
2017/08/23 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
微信小程序实现日历功能
2018/11/27 Javascript
详解在React项目中安装并使用Less(用法总结)
2019/03/18 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
js正则匹配多个全部数据问题
2019/12/20 Javascript
python获取从命令行输入数字的方法
2015/04/29 Python
Python使用QRCode模块生成二维码实例详解
2017/06/14 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
详解Python网络框架Django和Scrapy安装指南
2019/04/01 Python
int在python中的含义以及用法
2019/06/27 Python
如何实现Django Rest framework版本控制
2019/07/25 Python
Python如何输出整数
2020/06/07 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
小学语文业务学习材料
2014/06/02 职场文书
银行职员工作失误检讨书
2014/10/14 职场文书
2014个人年度工作总结
2014/12/15 职场文书
和谐家庭事迹材料
2014/12/20 职场文书
background-position百分比原理详解
2021/05/08 HTML / CSS
详解运行Python的神器Jupyter Notebook
2021/06/03 Python
Python函数中的不定长参数相关知识总结
2021/06/24 Python