同样是《python基础教程(第二版)》的内容,只是后面内容学起来,相比前面会比较有趣,也更加实用,所以,将“基础”改为“进阶”。

python 电子书分享地址:http://yunpan.cn/Q2U87uGrNiTA3

本节讲文件的操作

-------------------------------

打开文件

open函数用来打开文件,语法如下:

open(name[, mode[,buffering]])

open函数使用一个文件名作为唯一的强制参数,然后返回一个文件对象。假设我要打开我硬盘(I:/python/test.txt) 文件,可以用下面方法:

>>> f = open(r'i:\python\test.txt')

open函数中模式参数的常用值

基本文件方法

打开文件是第一步,下面就需要对文件进行读或写,可以write 和 read方法进行读或写。

#写入文件内容
>>> f = open('test.txt','w')
>>> f.write('hello,')
>>> f.write('world!')
>>> f.close() # 读取文件内容
>>> f = open('test.txt','r')
>>> f.read(4) #读取前4个字符
'hell'
>>> f.read() #读取剩余的所有字符
'o,world!'

关闭文件

  应该牢记使用close方法关闭文件。尽管一个文件对象在退出程序后会自动关闭,但关闭文件是没什么害处的,可以避免在某些操作系统或设置中进行无用的修改,这样做也会避免用完系统中打开文件的配额。

使用基本文件方法

假如test.txt文件包含如下内容:

-----------------------------

Welcome to this file

There is nothing here except

This stupid haiku

-----------------------------

下面是基本读文件的方法:

# read(n) 指定参数
>>> f = open(r'I:\python\test.txt')
>>> f.read(7)
'Welcome'
>>> f.read(4)
' to '
>>> f.close() # read() 不指定参数
>>> f = open(r'I:\python\test.txt')
>>> print f.read()
Welcome to this file
There is nothing here except
This stupid haiku
>>> f.close() # readline()
>>> f = open(r'I:\python\test.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.close() #readlines()
>>> import pprint
>>> pprint.pprint(open(r'I:\python\test.txt').readlines())
['Welcome to this file\n',
'There is nothing here except\n',
'This stupid haiku']

readline返回一行的字符串, readlines返回包含文件所有内容的字符串列表, 每个元素是一行的字符串。

pprint 模块的pprint方法将内容分成每个小项单行显示。

下面是写文件的基本方法:

>>> f = open(r'I:\python\test.txt','w')  #默认是读文件,可以不加‘r’,写文件一定要加’w’
>>> f.write('this\nis no \nhaiku')
>>> f.close()

>>> f = open(r'I:\python\test.txt')
>>> lines = f.readlines()
>>> lines[1] = "isn't a\n"
>>> f = open(r'I:\python\test.txt','w')
>>> f.writelines(lines)
>>> f.close()

对文件内容进行迭代

1、接字节处理

最常见的对文件内容进行迭代的方法是while循环中使用read方法。例如,对每个字符进行循环,可以用下面方法实现:

f = open(filename)
char = f.read(1)
while char:
process(char)
char = f.read(1)
f.close()

read方法返回的字符串会包含一个字符,直到文件末尾,read返回一个空的字符串,char将变为假。

可以看到,char = f.read(1) 被重复地使用,代码重复通过被认为是一件坏事,看看下面的方法:

f = open(filename)

while True:
char = f.read(1)
if not char: break
process(char)
f.close()

这里break语句被频繁的使用(这样会让代码比较难懂),尽管如此,但它仍然要比前面的方法好。

2、读取所有内容

如果文件不是很大,那么可以使用不带参数的read方法一次读取整个文件,或者使用readlines方法。

#用read迭代每个字符
f = open(filename)
for char in f.read():
process(char)
f.close()

#用readlines迭代行:
f = open(filename)
for line in f.readlines():
process(line)
f.close()

3、用fileinput 来进行迭代

fileinput模块包含了打开文件的函数,,只需要传一个文件名给它

import fileinput
for line in fileinput.input(filename):
process(line)

4、文件迭代器

好吧!这是python2.2之后才有的方法,如果它一开始就有,上面的方法也许就不存在了。文件对象是可以迭代的,这就意味着可以直接在for循环中对他们进行迭代

f = open(filename)
for line in f:
process(line)
f.close()

再来看下面例子:

>>> f = open(r'I:\python\test.txt','w')
>>> f.write('First line\n')
>>> f.write('Second line\n')
>>> f.write('Third line\n')
>>> f.close()
>>> lines = list(open(r'I:\python\test.txt'))
>>> lines
['First line\n', 'Second line\n', 'Third line\n']
>>> first,second,third = open(r'I:\python\test.txt')
>>> first
'First line\n'
>>> second
'Second line\n'
>>> third
'Third line\n'

在这个例子中:

  • 使用序列来对一个打开的文件进行解包操作,把每行都放入一个单独的变理中,这么做是很有实用性的,因为一般不知道文件中有多少行,但它演示的文件的“迭代性”。
  • 在写文件后一定要关闭文件,这样才能确保数据被更新到硬盘。

python进阶学习(一)的更多相关文章

  1. Python进阶学习之特殊方法实例详析

    Python进阶学习之特殊方法实例详析 最近在学习python,学习到了一个之前没接触过的--特殊方法. 什么是特殊方法?当我们在设计一个类的时候,python中有一个用于初始化的方法$__init_ ...

  2. python进阶学习笔记(一)

    python进阶部分要学习的内容: 学习目标: 1.函数式编程 1.1,什么是函数式编程 函数式编程是一种抽象计算的编程模式 不同语言的抽象层次不同: 函数式编程的特点: python支持的函数式编程 ...

  3. 魔法方法推开Python进阶学习大门

    热爱Python Python是Guido van Rossum设计出来的让使用者觉得如沐春风的一门编程语言.2020年11月12日,64岁的Python之父宣布由于退休生活太无聊,自己决定加入Mic ...

  4. [python]进阶学习之阅读代码

    起因 最近在公司的任务是写一些简单的运营工具,因为是很小的工具,所以就用了github上面的一个开源项目flask-admin,可以省去很多的事情. 但是,这个开源项目是个人维护的项目,所以文档相对简 ...

  5. python进阶学习(二)

    本节学习图形用户界面 ------------------------ 本节介绍如何创建python程序的图形用户界面(GUI),也就是那些带有按钮和文本框的窗口.这里介绍wxPython : 下载地 ...

  6. Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

  7. Python进阶学习_连接操作Redis数据库

    安装导入第三方模块Redis pip3 install redis import redis 操作String类型 """ redis 基本命令 String set(n ...

  8. python进阶学习笔记(四)--多线程thread

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

  9. python进阶学习(四)

    在使用多线程之前,我们首页要理解什么是进程和线程. 什么是进程? 计算机程序只不过是磁盘中可执行的,二进制(或其它类型)的数据.它们只有在被读取到内存中,被操作系统调用的时候才开始它们的生命期.进程( ...

随机推荐

  1. Java并发编程——线程安全及解决机制简介

    简介: 本文主要介绍了Java多线程环境下,可能会出现的问题(线程不安全)以及相应的解决措施.通过本文,你将学习到如下几块知识: 1. 为什么需要多线程(多线程的优势) 1. 多线程带来的问题—线程安 ...

  2. apache2修改用户和组

    grep nobody /etc/{passwd,group} groupadd nobody #有nobody用户的情况 usermod -G nobody nobody #没有nobody用户的情 ...

  3. css实现接地气的checkbox框

    1.前言 我做的项目中,很少默认用原生的样式,甚至连下拉框都很少用select框,不过,原生也有原生的好处,来得快,没有什么大问题.如果是自己用html+css去拼接的话,样式会好看一点.不过应人而异 ...

  4. spring实现文件上传(图片解析)

    合抱之木,生于毫末,千里之行,始于足下,要想了解spring的文件上传功能,首先要知道spring是通过流的方式将文件进行解析,然后上传.那么是不是所有需要用的文件上传的地方都要写一遍文件解析器呢? ...

  5. post提交数据长度限制问题

    最近做手机拍照照片上传时,由于图片较大,base64后字符串长度太长,所以提交失败. 修改Tomcat服务器的maxPostSize=0,解决完成! <Connector connectionT ...

  6. C++写#pragma warning(disable 4786)的作用

    C++编程时,在使用STL(C++标准模板库)的时候经常引发类似的错误,尤其是vector,map这类模板类,模板中套模板,一不小心就很长了. 当命名超过C++规定范围255字符时,就会产生这个名为d ...

  7. 处理Oracle数据中的无效对象

    今天还原了一份数据库(在服务器上没有无效对象),还原在本地之后有三十几个无效对象,当时很是郁闷,然后我发现还原之后的数据库中缺少表! 开始我怀疑Oracle数据库的还原功能,但是在我创建表的时候发现, ...

  8. Web安全测试——威胁攻防

    SQL注入 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL In ...

  9. java 内存模型的理解

    之前一直在实习,博客停写了一段时间,现在秋招开始了,所以辞职回来专心看书,同时将每天的收获以博客的形式记录下来.最近在看jvm相关的书籍,下面对面试中问得最多的部分--java 内存模型. 本篇博客大 ...

  10. 三菱Q系列PLC基本指令讲解

    1.数据传送指令MOV和MOVP,格式为 MOV    SRC1    DES1     表示条件接通,将SRC1的值传送到DES1寄存器中,带P的表示只在条件接通的上升沿指令执行一个扫描周期,不带P ...