python素材和代码_python之文件和素材

11.1 打开文件

open函数

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

>>>f = open(r'C:\text\somefile.txt')

11.1.1 文件模式

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

'r'读模式

'w'写模式

'a'追加模式

'b'二进制模式

'+'读/写模式

通过在模式参数中使用U参数能够在打开文件时使用通用的换行符支持模式,在这种模式下,所有的换行符/字符串(\r\n,\r或者是\n)都被转换成\n,而不用考虑运行的平台。

11.1.2 缓冲

open函数的第三个参数控制者文件的缓冲。如果参数是0或者False,I/O无缓冲的;如果是1或者True,就是有缓冲,大于1的数字代表缓冲区的大小,-1代表使用默认的缓冲区大小

11.2 基本文件方法

三种标准的流

数据输入得标准源是sys.stdin。

要打印的文本保存在sys.stdout内。

错误信息被写入sys.stderr.

11.2.1 读和写

文件最重要的能力是提供或者接受数据。如果一个名为f的类文件对象,那么就可以用f.write方法和f.read方法写入和读取数据。

每次调用f.write(string)时,所提供的参数string会被追加到文件中已存在部分的后面。

>>>f = open('somefile.txt','w')

>>>f.write('Hello, ')

>>>f.write('world!')

>>>f.close()

在完成了对一个文件的操作时,调用close。

例子:接上例:

>>>f = open('somefile.txt','r')

>>>f.read(4)

'Hello'

>>>f.read()

'o.World!'

首先指定了我要读取的字符数“4”,然后读取了剩下的文件。注意,在调用open时可以省略模式说明,因为'r'是默认的。

11.2.2 管式输出

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

somescript.py会从它的sys.stdin中读取数据(cat somefile.txt写入的),并把结果写入它的sys.stdout中。

统计sys.stdin中单词数的简单脚本

#somescript.py

import sys

text = sys.stdin.read()

words = text.split()

wordcount = len(words)

print 'Wordcount:',wordcount

可以用类文件对象seek和tell来直接访问感兴趣的部分(这种做法称为 随机访问)

seek(offset[,whence]):这个方法把当前位置移到由offest定义的位置。whence.offset是一个字节数,whence默认为0,也就是说偏移量是从文件开头开始计算的。whence可能被设置为1或者2

>>>f = open(r'c:\text\somefile.txt','w')

>>>f.write('01234567890123456789')

>>>f.seek(5)

>>>f.write('Hello,world!')

>>>f.close()

>>>f = open(r'c:\text\somefile.txt')

>>>f.read()

'01234Hello,world!89'

tell方法返回当前文件的位置如下:

>>>f = open(r'c:\text\somefile.txt')

>>>f.read(3)

'012'

>>>f.read(2)

'34'

>>>f.tell()

5L

11.2.3 读写行

逐个字符读取文件也是没问题的,进行逐行的读取也可以。还可以使用file.readline读取单独的一行。不使用任何参数或者使用一个非负的整数作为readline可以读取的字符的最大值。因此,如果someFile.readline()返回‘Hello,World!\n’,someFile.readline(5)返回‘Hello’。readlines方法可以读取一个文件中的所有行并将其作为列表返回。

writelines方法和readlines相反:传给它的一个字符串的列表,它会把所有的字符串写入文件。注意,程序不会增加新行,需要自己添加。没有writeline方法,因为能使用write。

11.2.3 关闭文件

如果想确保文件被关闭了,那么应该使用try/finally语句,并且在finally子句中调用close方法。

#Open your file here

try:

#Write data to your file

finally:

file.close()

事实上,有专门为这种情况设计的语句,with语句:

with open("somefile.txt") as somefile:

do_something(somefile)

with语句可以打开文件并且将其赋值到变量上。之后就可以将数据写入语句体中的文件。文件在语句结束后会被自动关闭,即使是由于异常引起的结束也是如此。

在python 2.5 中,with语句只有在导入如下的模块后才可以用:

from __future__ import with_statement

直到关闭文件才会写入文件。如果想继续使用文件,又想将磁盘上的文件进行更新,以反映这些修改,那么需要调用文件对象的flush方法。

上下文管理器

with语句实际上是很通用的结构,允许使用所谓的上下文管理器。上下文管理器是一种支持__enter__ 和__exit__ 方法的对象。

__enter__方法不带参数,它在进入with语句块的时候被调用,返回值绑定到在as关键字之后的变量。

__exit__方法带有3个参数:异常类型、异常对象和异常回溯。在离开方法时这个函数被调用。如果__exit__返回false,那么所有的异常都不会被处理。它们的__enter__方法返回文件对象本身,__exit__方法关闭文件。

11.2.5 使用基本文件方法

一个简单文本文件

Welcome to this file

There is nothing here except

This stupid haiku

首先是read(n):

>>>f = open(r'c:\text\somefile.txt')

>>>f.read(7)

'Welcome'

>>>f.read(4)

'to'

>>>f.close()

然后是read():

>>>f = open(r'c:\text\somefile.txt')

>>>print f.read()

Welcome to this file

There is nothing here except

This stupid haiku

>>>f.close()

接着是readline():

>>>f = open(r'c:\text\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.close()

以及readlines():

>>import pprint

>>>pprint.pprint(opne(r'c:\text\somefile.txt').readlines())

['Welcome to this file\n'

'There is nothing here except\n'

'This stupid haiku']

注意,本例中我所使用的是文件对象自动关闭的方式。

下面是写文件,首先是write(string):

>>>f = open(r'c:\text\somefile.txt','w')

>>>f.write('this\nis no\nhaiku')

>>>f.close()

运行后:

this

is no

haiku

最后是writelines(list):

>>>f = open(r'c:\text\somefile.txt')

>>>lines = f.readlines()

>>>f.close()

>>>line[1] = "isn't a\n"

>>>f = open(r'c:\text\somefile.txt','w')

>>>f.writelines(lines)

>>>f.close()

运行后:

this

isn't a

haiku

11.3.1 按字节处理

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

用read方法对每个字符进行循环

f = open(filename)

char = f.read(1)

while char:

process(char)

char = f.read(1)

f.close()

这个程序可以使用是因为当到达文件的末尾时,read方法返回一个空的字符串,但在那之前返回的字符串包含一个字符,如果char是真,则表示还没有到文件末尾。

可以看到,赋值语句char = f.read(1)被重复地使用,代码重复通常被认为是一件坏事。

用不同的方式写循环

f = open(filename)

while True:

char = f.read(1)

if not char:break

process(char)

f.close()

11.3.2 按行操作

当处理文本文件时,经常会对文件的行进行迭代而不是处理单个字符。处理行使用的方法和处理字符一样,即使用readline方法:

在while循环中使用readline

f = opne(filename)

while True;

line = f.readline()

if not line: break

process(line)

f.close()

11.3.3 读取所有内容

如果文件不是很大,那么可以使用不带参数的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()

11.3.4使用fileinput实现懒惰行迭代

在需要对一个非常大的文件进行迭代行的操作时,readlines会占用太多的内存。这个时候可以使用while循环和readline方法来替代。当然,在python中如果能使用for循环,那么它就是首选。本例恰好可以使用for循环可以使用一个名为懒惰行迭代的方法:说它懒惰是因为它只是读取实际需要的文件部分。

用fileinput来对行进行迭代

import fileinput

for line in fileinput.input(filename):

process(line)

11.3.5 文件迭代器

迭代文件

f = open(filename)

for line in f:

process(line)

f.close()

对文件进行迭代而不使用变量存储文件对象

for line in open(filename)

process(line)

注意sys.stdin是可迭代的,就像其他的文件对象。因此如果想要迭代标准输入中的所有行,可以按如下形式使用sys.stdin.

import sys

for line in sys.stdin:

process(line)

可以对文件迭代器执行和普通迭代器相同的操作。比如将它们转换为字符串列表(使用list(open(filename)) ),这样所达到的效果和使用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'

在这个例子中,有几点重要的:

1.使用print来向文件内写入内容,,这会在提供的字符串后面增加新的行

2.使用序列来对一个打开的文件进行解包操作,把每行都放入一个单独的变量中(这么做是很有实用性的,因为一般不知道文件中有多少行,但它演示了文件对象的“迭代性”)

3.在写文件后关闭了文件,是为了确保数据被更新到硬盘。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/261365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类库开发的设计准则

MSDN:类库开发的设计准则转载于:https://www.cnblogs.com/Joetao/articles/2095307.html

ShowMsg函数妙用

为什么80%的码农都做不了架构师?>>> 在对DedeCMS做2次开发的时候可能提示信息会经常用到,为了方便在此将ShowMsg方法提取出来,使用方法:ShowMsg(“提示信息”,“进行跳转的页面URL”&#xff0…

二进制文件比较

一 工具 使用Araxis Merge类似的工具来比较两个文件夹是否相同,比较两个二进制文件是否相同。1) 比较两个文件夹是否相同,只要有文件的名字不同就认为两个文件夹不相同2) 文件修改为新的名字后,二进制比较时仍与原文件…

springboot 分页查询参数_10. Spring Boot 中的分页查询

在Spring Boot中使用分页查询主要依赖了org.springframework.data.domain.*包下面的及格分页类的功能。使用分页查询常见有两种方式,一种是直接在程序中写死分页的参数(页数,每页大小等),需要依赖PageableDefault注解。该注解指明了分页参数的…

碰到一个微软的bug:CWinAppEx::GetString

在调试公司项目代码的时候,有一个系统设置的功能,里面需要从注册表中去读取数据,因为使用了MFC框架所以,为了简化代码直接使用了CWinAppEx::GetString 、CWinAppEx::SetString、CWinAppEx::GetInt、CWinAppEx::SetInt等等框架内函…

关系数据库SQL之可编程性函数(用户自定义函数)

前言 在关系型数据库中除了前面几篇基本的数据库和数据表操作之外,还提供了可编程性的函数、存储过程、事务、触发器及游标。 本文介绍的是函数。 函数分为两种: 系统函数用户自定义函数准备工作 这里以银行存取款为例说明。 1、创建数据表 --创建账户信…

土压力图怎么画_电气系统图怎么画?

电气系统图,又称为电气系统控制图,是通过使用国家规定的图形符号和文字代号代表各种电器、电机及元件,根据生产机械的要求和各种电器的原理,用线条代表导线连接起来,用于展示供电线路与各设备工作原理及其相互关系的一…

mvc

Model、View、Controller 一、Model Proxy-->数据端(与远程服务器通信) 二、view Mediator--->操作视图组件(添加事件监听器,发送或接收Notification) 三、Controller Command映射(获取Proxy,通过收发Notification操作别的Command) 框架以外要做的&#xff1a…

C#中往数据库插入/更新时候关于NUll空值的处理

本文转载:http://blog.csdn.net/chybaby/article/details/2338943 今天碰到个问题。。SqlCommand对传送的参数中如果字段的值是NULL具然不进行更新操作,也不提示任何错误。。。百思不得其解。。。先作个记录,再查资料看看什么原因。 暂时的解…

考勤助手——数据库3.0版本

基于数据库1.0及2.0版本,我们将细节的地方逐一进行讨论,设计出了数据库3.0版本。 根据ER图,进行基本表的设计如下: 转载于:https://www.cnblogs.com/GG-TEN/p/5471019.html

System.Data.OleDb.OleDbException: INSERT INTO 语句的语法错误

这个错误主要是因为INSERT INTO 语句里包括了access的关键字,可以通过对插入的字段中加上括号[]即可。如:insert into key_list([key],[ZM]) values(key,ZM)即可解决。转载于:https://www.cnblogs.com/liuhaitao/archive/2011/07/07/2100561.html

Ruby中的%表示法

%{String} 用于创建一个使用双引号括起来的字符串 %Q{String} 用于创建一个使用双引号括起来的字符串 %q{String} 用于创建一个使用单引号括起来的字符串 %r{String} 用于创建一个正则表达式字面值 %w{String} 用于将一个字符串以空白字符切分成一个字符串数组…

幽灵交易策略_幽灵交易者策略(附源代码)

NO1 . 前言正如幽灵交易者的名字,该策略的核心思路是,在真实下单交易之前,先虚拟出一个交易,如果这个虚拟的交易是亏损的,那么下一次才启动真实的交易。NO2 . 策略简介该策略思路源自于交易者的观察,交易者…

test blog

blogsdf sdfsd转载于:https://blog.51cto.com/11570194/1771304

面向对象66原则

你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。 ----- Arthur J.Rie…

并行编程——内存模型之缓存一致性

1 定义 缓存一致性 Cache coherence 简称 CC, 缓存一致性协议是在共享缓存多处理器架构确保最终一致性最突出、最重要的机制。这些协议在缓存线(cache-line)级别实现了对一致性的保证。缓存线是从主内存中读取数据和向内存中写入数据的缓存单…

Start Instance 操作详解 - 每天5分钟玩转 OpenStack(31)

本节通过日志文件详细分析 instance start 操作。下面是 start instance 的流程图向 nova-api 发送请求nova-api 发送消息nova-compute 执行操作下面我们详细讨论每一个步骤。 向 nova-api 发送请求客户(可以是 OpenStack 最终用户,也可以是其他程序&…

失望时想起了你是什么歌_你是空你是空是什么歌 你是风你是风什么歌

“你是空,你是空”“你是风,你是风”“下起雨想起了你”前奏的歌曲最近在抖音受到很多人的喜欢,想要找到完整版歌词作为BGM,这首歌非常的洗脑,你是空你是空是什么歌?你是风什么歌?下面八宝网带来…

linux screen 命令详解

一、背景 系统管理员经常需要SSH 或者telent 远程登录到Linux 服务器,经常运行一些需要很长时间才能完成的任务,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为它们执行的时间太长了。必须等待它…

ASP.NET MVC从视图传递多个模型到Controller

从后台组织好数据然后传递到页面倒是水到渠成很方便,因为MVC自身就将这样的需求内建到了这个系统中。我只需要在后台组织好一个List 或IEnumerable类型的变量,将需要传递的数据模型扔进去便可。 比如这里我们向视图返回5条product信息在页面进行展示&…