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 ORM框架SQLAlchemy学习笔记之映射类使用实例和Session会话介绍
Jun 10 Python
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
跟老齐学Python之玩转字符串(2)
Sep 14 Python
Python编程实现正则删除命令功能
Aug 30 Python
Python实现的选择排序算法原理与用法实例分析
Nov 22 Python
Python pandas常用函数详解
Feb 07 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
python 缺失值处理的方法(Imputation)
Jul 02 Python
python 使用plt画图,去除图片四周的白边方法
Jul 09 Python
Python 读取 YUV(NV12) 视频文件实例
Dec 09 Python
关于torch.optim的灵活使用详解(包括重写SGD,加上L1正则)
Feb 20 Python
Python爬虫之自动爬取某车之家各车销售数据
Jun 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
PHP 面向对象 PHP5 中的常量
2010/05/05 PHP
php数字转汉字代码(算法)
2011/10/08 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
js实现的日期操作类DateTime函数代码
2010/03/16 Javascript
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
解析JavaScript中的标签语句
2013/06/19 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
JS+CSS实现TreeMenu二级树形菜单完整实例
2015/09/18 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
微信小程序:报错(in promise) MiniProgramError
2020/10/30 Javascript
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
python 创建一个空dataframe 然后添加行数据的实例
2018/06/07 Python
解决项目pycharm能运行,在终端却无法运行的问题
2019/01/19 Python
python删除列表元素的三种方法(remove,pop,del)
2019/07/22 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
html5使用canvas绘制太阳系效果
2014/12/15 HTML / CSS
香港时装购物网站:ZALORA香港
2017/04/23 全球购物
线程同步的方法
2016/11/23 面试题
对祖国的寄语大全
2014/04/11 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
个人求职自荐信范文
2015/03/06 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
大学生村官工作心得体会
2016/01/23 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
Win11更新失败并提示0xc1900101
2022/04/19 数码科技