文档章节

python文件处理

阿山
 阿山
发布于 2014/05/22 14:07
字数 1555
阅读 163
收藏 18

文件是我们储存信息的地方,我们经常要对文件进行读、写、删除等的操作,在Python中,我们可用Python提供的函数和方法方便地操作文件。

9.1. 文件处理的函数和方法

使用Open()函数可打开文件,语法格式如下:

file_handler = open(filename,[,mode[,bufsize]]

filename是你要操作的文件名,如果不在当前路径,需指出具体路径。mode是打开文件的模式,表示你要如何操作文件,bufsize表示是否使用缓存。

Table 9.1. mode

模式

描述

r

以读方式打开文件,可读取文件信息。

w

以写方式打开文件,可向文件写入信息。

a

以追加方式打开文件,文件指针自动移到文件尾。

r+

以读写方式打开文件,可对文件进行读和写操作。

w+

消除文件内容,然后以读写方式打开文件。

a+

以读写方式打开文件,并把文件指针移到文件尾。

b

以二进制模式打开文件,而不是以文本模式。该模式只对Windows或Dos有效,类Unix的文件是用二进制模式进行操作的。

Table 9.2. bufsize

bufsize取值

描述

0

禁用缓冲

1

行缓冲

>1

指定缓冲区的大小

<1

系统默认的缓冲区大小

open()函数返回一个文件对象,我们可通过read()或write()函数对文件进行读写操作,下面是一些文件对象方法:

Table 9.3. 文件对象方法

方法

描述

f.close()

关闭文件,记住用open()打开文件后一定要记得关闭它,否则会占用系统的可打开文件句柄数。

f.fileno()

获得文件描述符

f.flush()

刷新输出缓存

f.isatty()

如果文件是一个交互终端,则返回True,否则返回False。

f.read([count])

读出文件,如果有count,则读出count个字节。

f.readline()

读出一行信息。

f.readlines()

读出所有行,也就是读出整个文件的信息。

f.seek(offset[,where])

把文件指针移动到相对于where的offset位置。offset为0表示文件开始处,这是默认值 ;1表示当前位置;2表示文件结尾。

f.tell()

获得文件指针位置。

f.truncate([size])

截取文件,使文件的大小为size。

f.write(string)

把string字符串写入文件。

f.writelines(list)

把list中的字符串一行一行地写入文件。

9.2. 示例

·        文件的打开或创建

· #!/usr/bin/env python
· #-*- encoding:UTF-8 -*-
·
· filehandler = open('test.txt','w')              #以写模式打开文件,如果文件不存在则创建
· filehandler.write('this is a file open/create test.\nthe second line.')
·
· filehandler.close()
· #!/usr/bin/env python
· #-*- encoding:UTF-8 -*-
·
· filehandler = open('test.txt','a')     #以追加模式打开文件,如果文件不存在则创建
·
· filehandler.write('\nappend the text in another line.\n')
·
· filehandler.close()

·        读取文件

· #!/usr/bin/env python
· #-*- encoding:UTF-8 -*-
·
· filehandler = open('test.txt','r')   #以读方式打开文件,rb为二进制方式(如图片或可执行文件等)
·
· print 'read() function:'             #读取整个文件
· print filehandler.read()
·
· print 'readline() function:'         #返回文件头,读取一行
· filehandler.seek(0)
· print filehandler.readline()
·
· print 'readlines() function:'        #返回文件头,返回所有行的列表
· filehandler.seek(0)
· print filehandler.readlines()
·
· print 'list all lines'               #返回文件头,显示所有行
· filehandler.seek(0)
· textlist = filehandler.readlines()
· for line in textlist:
·       print line
·
· print 'seek() function'              #移位到第32个字符,从33个字符开始显示余下内容
· filehandler.seek(32)
· print filehandler.read()
·
· print 'tell() function'              #移位到文件头,从头开始显示2位字符
· filehandler.seek(0)
· print filehandler.readline()         #显示第一行内容
· print filehandler.tell()             #显示当前位置
· print filehandler.readline()         #显示第二行内容
· print filehandler.read()             #显示余下所有内容
·
· filehandler.close()                  #关闭文件句柄

·        文件系统操作

· #!/usr/bin/env python
· #-*- encoding:utf-8 -*-
·
· import os,fnmatch,glob
·
· for fileName in os.listdir ( '/root' ):                #列出/root目录内容,不包括.和..
·    print fileName
·
· os.mkdir('py')                 #在当前目录下创建一个py目录,且只能创建一层
· os.rmdir( 'py')                #在当前目录下删除py目录,且只能删除一层
· os.makedirs('py/aa')           #可创建多层目录
· os.removedirs('py/aa')         #可删除多层目录
·
·
· print 'demonstration fnmatch module'
· for fileName in os.listdir ( '/root/python/file' ):
·         if fnmatch.fnmatch(fileName,'*.txt'):       #利用UNIX风格的通配,只显示后缀为txt的文件
·                 print fileName
·
· print 'demonstration glob module'
· for fileName in glob.glob ( '*.txt' ):              #利用UNIX风格的通配,只显示后缀为txt的文件
·         print fileName

·        获取文件状态

· #!/usr/bin/env python
· #-*- encoding:UTF-8 -*-
·
· import os,time,stat
·
· fileStats = os.stat ( 'test.txt' )                        #获取文件/目录的状态
· fileInfo = {
· 'Size':fileStats [ stat.ST_SIZE ],                        #获取文件大小
· 'LastModified':time.ctime( fileStats [ stat.ST_MTIME ] ), #获取文件最后修改时间
· 'LastAccessed':time.ctime( fileStats [ stat.ST_ATIME ] ), #获取文件最后访问时间
· 'CreationTime':time.ctime( fileStats [ stat.ST_CTIME ] ), #获取文件创建时间
· 'Mode':fileStats [ stat.ST_MODE ]                         #获取文件的模式
· }
· #print fileInfo
·
· for field in fileInfo:                                    #显示对象内容
·         print '%s:%s' % (field,fileInfo[field])
·
· #for infoField,infoValue in fileInfo:
· #      print '%s:%s' % (infoField,infoValue)
· if stat.S_ISDIR ( fileStats [ stat.ST_MODE ] ):            #判断是否路径
·         print 'Directory. '
· else:
·         print 'Non-directory.'
·
· if stat.S_ISREG ( fileStats [ stat.ST_MODE ] ):            #判断是否一般文件
·    print 'Regular file.'
· elif stat.S_ISLNK ( fileStats [ stat.ST_MODe ] ):          #判断是否链接文件
·    print 'Shortcut.'
· elif stat.S_ISSOCK ( fileStats [ stat.ST_MODe ] ):         #判断是否套接字文件
·    print 'Socket.'
· elif stat.S_ISFIFO ( fileStats [ stat.ST_MODe ] ):         #判断是否命名管道
·    print 'Named pipe.'
· elif stat.S_ISBLK ( fileStats [ stat.ST_MODe ] ):          #判断是否块设备
·    print 'Block special device.'
· elif stat.S_ISCHR ( fileStats [ stat.ST_MODe ] ):          #判断是否字符设置
·    print 'Character special device.'
· #!/usr/bin/env python
· #-*- encoding:UTF-8 -*-
·
· import os.path
·
· fileStats = 'test.txt'
·
· if os.path.isdir ( fileStats ):        #判断是否路径
·         print 'Directory.'
· elif os.path.isfile ( fileStats ):     #判断是否一般文件
·         print 'File.'
· elif os.path.islink ( fileStats ):     #判断是否链接文件
·         print 'Shortcut.'
· elif os.path.ismount ( fileStats ):    #判断是否挂接点
·         print 'Mount point.'

stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义。我们可方便地根据stat模块存取os.stat()中的值。

·        串行化文件

· #!/usr/bin/env python
· #-*- encoding:UTF-8 -*-
·
· import pickle
·
· filehandler = open('pickle.txt','w')
·
· text = ['this is a pickle demonstrate','aa','bb']
·
· pickle.dump(text,filehandler)          #把text的内容序列化后保存到pickle.txt文件中
·
· filehandler.close()
·
· filehandler2 = open('pickle.txt')
·
· textlist = pickle.load(filehandler2)   #还原序列化字符串
· print textlist
·
· filehandler2.close()
·
· #cpickle是用C写的pickle模块,比标准的pickle速度快很多,使用方法同pickle。

·        内存文件

· #!/usr/bin/env python
· #-*- coding: utf-8 -*-
·
· import StringIO
·
· fileHandle = StringIO.StringIO ( "Let freedom ring." )  #create file in memory
·
· print fileHandle.read() # "Let freedom ring."
·
· fileHandle.close()
·
· #cStringIO是用C写的StringIO模块,执行速度比StringIO快。

shutil模块是一个高级的文件处理模块,可实现文件的拷贝、删除等操作。


本文转载自:http://blog.sina.com.cn/s/blog_53866e1301009j1a.html

阿山
粉丝 3
博文 28
码字总数 12844
作品 0
海淀
程序员
私信 提问
python处理word文件:win32com用法详解

目标:用python处理doc文件 方法:引入win32com模块 ** 一、安装 ** 首先要先下载安装win32com模块(起先在linux下装不成功,后在windows下面成功了。。。) 下载地址:http://sourceforge....

彼得
2014/07/21
16.6K
3
书籍:掌握Python脚本系统管理 Mastering Python Scripting for System Administrators - 2019.pdf

简介 主要特点 了解如何解决系统管理员的问题并自动执行日常活动 学习处理正则表达式,网络管理 构建GUI,网络抓取和数据库管理,包括数据分析 Python随着时间的推移不断发展,并扩展了与每个...

python人工智能命理
04/08
0
0
请教:我的Python处理文件只能处理前14500行?

我用Python 2.6版和Python 3.2版处理数据。数据比较大,是写在一个.txt文件里。 我用Python处理这个.txt文件,我发现一个问题,我的Python只能处理前14500行! 比如我用shutil.copyfile把这个...

Fitz999
2015/04/08
289
2
用boost python加快vc程序开发

开源项目官方地址: http://www.xiaoniuhui.com/ 原文链接: http://xiaoniuhui.com/#!/用boost-python加快vc程序开发 目录 用标准c接口嵌入python 用boost python嵌入python 用python来实现业...

编码的风景
2013/08/27
1K
0
156个Python网络爬虫资源,妈妈再也不用担心你找不到资源了

本列表包含Python网页抓取和数据处理相关的库。 前几天有私信小编要Python的学习资料,小编整理了一些有深度的Python教程和参考资料,从入门到高级的都有,文件已经打包好了,正在学习Pytho...

雁横
2018/05/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

如何在Notepad ++中格式化XML?

我有Notepad ++ ,我得到了一些非常长的XML代码。 当我将它粘贴在Notepad ++中时,存在很长的代码行(难以阅读和使用)。 我想知道是否有一种简单的方法可以使文本可读(通过可读,我的意思是...

技术盛宴
41分钟前
6
0
(Object[])null

dbutils下QueryRunner.java 的一段代码: package org.apache.commons.dbutils; public <T> T query(Connection conn, String sql, ResultSetHandler<T> rsh) throws SQLException { ......

行者终成事
42分钟前
5
0
商品评价

商品评价 商品评价 商品评价:指买家对所购买商品的评价。 一、商品评价的具体操作:在个人中心找到商品评价,找到商品对其评价,添加评价内容,添加商品图片。 二、商品评价在后台的具体显示...

Geek-Chic
45分钟前
7
0
几种密码方式:

https://www.cnblogs.com/dhplxf/p/7966890.html

MtrS
45分钟前
4
0
GUAVA--集合(集合扩展工具类)

一、简介 有时候你需要实现自己的集合扩展。也许你想要在元素被添加到列表时增加特定的行为,或者你想实现一个 Itera ble,其底层实际上是遍历数据库查询的结果集。Guava 为你,也为我们自己...

MrYuZixian
45分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部