python基础教程总结10——文件

1.打开文件

  open(name[mode[,buffing])    参数:  文件,模式,缓冲

1)name: 是强制选项,模式和缓冲是可选的

#如果文件不在,会报下面错误1 >>> f = open(r‘D:\text.txt‘,‘r‘)
2 Traceback (most recent call last):
3   File "<stdin>", line 1, in <module>
4 IOError: [Errno 2] No such file or directory: ‘D:\\text.txt‘  

2)文件模式

‘r‘       读模式
‘w‘      写模式
’a‘      追加模式
‘b‘      二进制模式(可添加到其他模式中使用)
’+‘      读/写模式(可添加到其他模块中使用)

NOTE:

    默认的方式,比如说open(‘filename‘)是读模式

    r+, 则表示可读写

     如果是二进制文件或图形文件,则必须用缓冲模式

     普通的w模式会覆盖文件的内容,a模式则不会.

     rb则可以用来读取二进制文件.

     通过参数模式中使用U参数,能够在打开文件时使用通用的换行符支持模式,无论\r,\n\r,都会换成\n,而不用考虑运行的平台.

3)缓冲

  0或者False: 无缓冲,所有操作直接针对硬盘

  1或者True:  有缓冲,内存代替硬盘,速度快,只有close,flush才写入硬盘同步.

  > 1  :  表示缓冲区的大小

  -1    :  表示默认的缓冲区大小

2.文件方法

2.1 读写

  #对空文件来说: 提供写时,会在已在字符串末尾追加,

1 >>> f = open(‘somefile.txt‘,‘w‘)
2 >>> f.write(‘Hello,‘)
3 >>> f.write(‘World!‘)
4 >>> f.close()
5 #somefile.txt文件内容
6 Hello,World!  

  #对于非空文件:提供w方法时,会覆盖文件中的内容

1 >>> f = open(‘somefile‘,‘w‘)
2 >>> f.write(‘This is 1st line.\n‘)
3 >>> f.write(‘This is 2nd line.‘)
4 >>> f.close()
5 #somefile.txt文件内容
6 This is 1st line.
7 This is 2nd line.  

  简单读取的例子:

1 >>> f = open(‘somefile.txt‘,‘r‘)
2 >>> f.read(16)#先读取16个字符
3 ‘This is 1st line‘
4 >>> f.read()  #会读取剩下的内容,除非seek定位到0,重新读取
5 ‘.\nThis is 2nd line.‘
6 >>> f.close()  

2.2 管道输出

  $ cat somefile.txt | python somescript.py | sort

#一个简单例子: 统计一个文本中单词的数量

$ cat somefile.txt
This is a book!
That is a dog!
Who are you?

  脚本清单:

#somescript.py
import sys
text  = sys.stdin.read()    #读取所以输入
words = text.split()        #分割字符串
print "Word Count:", len(words)  

   输出结果:

# cat somefile.txt | python somescript.py
Word Count: 11

  

2.3 读写行

readline :  读取行,包括换行符

readlines:  读取所有行

write:      写一行, 注意:没有writeline方法

writelines: 写多行  

  NOTE: 如何判断不同的行以什么结尾? os.linesep

#UNIX
>>> import os
>>> os.linesep
‘\n‘
#WINDOWS
>>> import os
>>> os.linesep
‘\r\n‘

  

2.4 基本文件方法

#测试文本somefile.txt

Welcome to this file

There is nothing here except

This stupid haiku 

#首先读取指定字符 ——  f.read(n)

>>> f = open(r‘d:\Learn\Python\somefile.txt‘)
>>> f.read(7)
‘Welcome‘
>>> f.read(4)
‘ to ‘
>>> f.close()

#其次读取所有的行—— f.read()

>>> f = open(r‘d:\Learn\Python\somefile.txt‘,‘r‘)
>>> print f.read()
Welcome to this file
There is nothing here except
This stupid haiku    

#接着是读取行 —— f.readline()

>>> f.close()
>>> f = open(r‘d:\Learn\Python\somefile.txt‘)
>>> for i in range(3):
...     print str(i) + ‘:‘ + f.readline()
...
0:Welcome to this file
1:There is nothing here except
2:This stupid haiku    

#再读取所有行 ——  f.readlines()

>>> import pprint
>>> pprint.pprint(open(‘somefile.txt‘).readlines())
[‘Welcome to this file\n‘,
 ‘There is nothing here except\n‘,
 ‘This stupid haiku‘]  

#下面是写文件—— f.write(‘ ......‘)

>>> f = open(r‘somefile.txt‘,‘w‘)
>>> f.write(‘this\nis no\nhaiku‘)
>>> f.close()
运行文件后,内容如下:
this
is no
haiku

#最后是writelines—— f.writelines( ‘ ....‘ )

>>> f = open(r‘somefile.txt‘)
>>> lines = f.readlines()
>>> f.close()
>>> lines[1] = "isn‘t a\n"
>>> f = open(‘somefile.txt‘,‘w‘)
>>> f.writelines(lines)
>>> f.close()
运行后,文件内容如下:
this
isn‘t a
haiku   

2.5 关闭文件

  时刻记得close()来关闭文件,这样做的目的:

     安全考虑,防止文件因为某些原因崩溃,写不进数据

    出于数据同步考虑,close(),才会往硬盘中写数据

     出于效率的考虑,内存中的数据可清空一部分出来

  为了确保程序结束时close(),可以用try/finally结合使用

# Open your file here
try:
    # Write data to your file
finally:
    file.close()

  NOTE: 一般文件在close()之后才会写入硬盘,如果想不执行close()方法,又可以看到写入的内容,那么flush就派上用场了.

3.对文件内容迭代

3.1 按字节处理

def process(string):
        print ‘Processing...‘, string
f = open(‘somefile.txt‘)
while True:
        char = f.read(1)
        if not char:
                break
        process(char)
f.close()  

3.2 按行处理

f = open(filename)
while True:
    line = f.readline()
    if not line:
        break
    process(line)
f.close()  

3.3 读取所有内容

  如果文件不是很大,可以用read(),或者readlines()读取的内容作为字符串来处理.

  #用read来迭代每个字符

f = open(r‘D:\Work\Python\somefile.txt‘)
for char in f.read():
    process(char)
f.close()

  #用readlines来迭代行

f = open(r‘D:\Work\Python\somefile.txt‘,‘r‘)
for line in f.readlines():
    process(line)
f.close()  

3.4 使用fileinput懒惰型迭代

  在需要对一个大文件进行迭代时,readlines会占用太多的内存。这个时候可以使用while循环和readline方法来替代。

import fileinput
def process(string):
    print ‘Processing...‘, string
for line in fileinput.input(‘somefile.txt‘):
    process(line)

  

3.5 文件迭代器

  #Python中文件是可以迭代的

f = open(‘somefile.txt‘)
for line in f:
    print line,
f.close()

  #如果希望Python来完成关闭的动作,对文件进行迭代,而不使用变量存储变量,代码可以更加精简

for line in open(‘somefile.txt‘):
    print line,

  #sys.stdin也是可以迭代的

import sys
for line in sys.stdin:
    print line,
运行结果:
D:\Work\Python>python file.py
#输入下面两行
Hello,World!
Hello,Jerry!
^Z
#按下CTRL+Z键后,输入的内容,显示
Hello,World!
Hello,Jerry!

  #可以对文件迭代器执行和普通迭代器相同的操作。比如将它们转换为字符串列表,这样所达到的效果和使用readlines一样.

>>> f = open(‘somefile.txt‘,‘w‘)
>>> f.write(‘First line\n‘)
>>> f.write(‘Second line\n‘)
>>> f.write(‘Third line\n‘)
>>> f.close()
>>> lines = list(open(‘somefile.txt‘))
>>> lines
[‘First line\n‘, ‘Second line\n‘, ‘Third line\n‘]
>>> first,second,third = open(‘somefile.txt‘)
>>> first
‘First line\n‘
>>> second
‘Second line\n‘
>>> third
‘Third line\n‘

  

时间: 2024-10-19 12:30:08

python基础教程总结10——文件的相关文章

python基础教程_学习笔记10:异常

异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.如果异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止执行: >>> 1/0 Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> 1/0 ZeroDivisionError: integer division or modulo by

Python基础教程(第十一章 文件和流)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5519591.html______ Created on Marlowes 到目前为止,本书介绍过的内容都是和解释器自带的数据结构打交道.我们的程序与外部的交互只是通过input.raw_input和print函数,与外部的交互很少.本章将更进一步,让程序能接触更多领域:文件和流.本章介绍的函数和对象可以让你在程序调用时存储数据,

python基础教程_学习笔记21:文件和素材

文件和素材 打开文件 open函数用来打开文件,语法如下: open([name[,mode[,buffering]]) open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象.模式(mode)和缓冲(buffering)参数都是可选的. >>> f=open(r'D:\software(x86)\Python27\README.txt') 如果文件不存在,则出现错误: >>> f=open(r'D:\software(x86)\Python27\READM

Python基础教程(第九章 魔法方法、属性和迭代器)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5437223.html______ Created on Marlowes 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

《Python基础教程(第二版)》学习笔记 -&gt; 第九章 魔法方法、属性和迭代器

准备工作 >>> class NewStyle(object): more_code_here >>> class OldStyle: more_code_here 在这两个类中,NewStyle是新式的类,OldStyle是旧式的类,如果文件以__metaclass__ = type 开始,那么两个类都是新式类. 构造方法 构造方法,当一个对象被创建后,会立即调用构造方法.Python中创建一个构造方法,只要把init方法的名字从简单的init修改成__init__

《Python基础教程(第二版)》学习笔记 -&gt; 第十章 充电时刻 之 标准库

SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg])                退出当前的程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 平台标识符 stdin 标准输入流-- 一个类文件对象 stdout 标准输出流-- 一个类文件对象 stderr

python基础教程(一)

之所以选择py交易有以下几点:1.python是胶水语言(跨平台),2.python无所不能(除了底层),3.python编写方便(notepad++等文本编辑器就能搞事情),4.渗透方面很多脚本都是py编写的(而且google的网站也是py) 安装与运行交互式解释器 在绝大多数linux和 UNIX系统安装中(包括Mac OS X),Python的解释器就已经存在了.我们可以在提示符下输入python命令进行验证(作者环境ubuntu) [email protected]:~$ python

python基础教程——即时标记(详解)

最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习python的我帮助有限. 下面是自己学习过程整理的一些内容. 基础版: 基础教程上面的项目例子,都会先出一个基础的代码版本,然后根据第一个版本,进行相应的补充完善.我们先来看一下util.py这个文件. 1 #encoding:utf-8 2 #生成器,for循环时会依次返回每一行,它只在文件的最后追