摘要: Python对于文件和流的操作与其他编程语言基本差不多,甚至语句上比其他语言更为简洁。文件和流函数针对的对象除了这两者之外还有,类文件(file-like),即python中只支持读却不支持写的流函数。本文介绍了python中常见的文件和流的操作函数以及操作方式。

Python中最基本的流函数:open

open(name[, mode[, buffering]]):其中name是文件所在路径,

Python中常用的文件模式:

  • r: 只读模式
  • w: 覆盖模式
  • a: 扩展模式
  • b: 二进制模式(通常与其他模式同时使用)
  • +: 增加模式(通常与其他模式同时使用)

其中,open函数模式的默认值为只读模式。 buffering函数可以为True或者False,表示是否对文件进行内存加速。

Python最基本的读写函数:read和write及其相关内容

  • read([size]):从当前位置继续读取文件内容,size参数为可选,指定了读取的字节数。默认为读取文件中的所有内容。
  • readline([size]):读取下一行文字。size表示读取改行的字符数量。Python中可以通过readline一次性读整行内容,readlines一次性读全部内容。
  • write(string):向文件中写入特点字符

注意:wirte方法会将原有文件清空后再写入现有脚本的数据。然而在同一个脚本中,持续调用write不会覆盖之前语句所写的内容,而是在之前写入位置之后增添新内容。

Linux系统中,可以使用``` $cat Infile | py_script

来源:百度网盘搜索 http://www.gooln.com/document/348.html

```
//其中somefile.txt含有文本
$ cat somefile.txt | python somescript.py

# somescript.py
import sys
text = sys.stdin.read()
words = text.split()
wordcount = len(words)
print 'Wordcount:', wordcount

Python中三种标准形式的流:sys.stdin, sys.stdout以及sys.stderr。

在特定位置读写:seek和tell函数:

Python中可以通过seek函数和tell函数获取下一个被读取字符在当前文件中的位置,示例代码如下:

f = open(r'text\somefile.txt', 'w')
f.write('01234567890123456789')
f.seek(5)
f.write('Hello, World!')
f.close()
f = open(r'text\somefile.txt')
print f.read()
结果:01234Hello, World!89

>>> f = open(r'text/somefile.txt')
>>> f.read(3)
'012'
>>> f.tell()
3L

文件关闭和缓存清空

关于close()方法,当文件用于只读时,建议调用close()方法;当文件用于写入时,则写入完毕必须调用close()方法。为了防止由于异常出现文件未正常关闭,可以将close方法置于finally语句中进行调用。此外,将流操作置于with语句中也是一个可行的操作,并且不用考虑文件关闭的问题,举例如下:

l = ["it is a gooday!",
     "Hello, world!",
     "Thanks"]

with open(r'text/RWLines.txt', 'w') as f:
    for eachStr in l:
        f.write(eachStr + "\n")

"""
This is wrong because file is already closed after with clause:
f.read(2)
"""

另外,调用flush方法则会清空当前I/O流中的缓存信息。关于缓存的处理,可以参考以下两种常用方式:

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

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

Python进阶篇四:Python文件和流的更多相关文章

  1. Python进阶篇:Python简单爬虫

    目录 前言 要解决的问题 设计方案 代码说明 小结 前言 前一段一直在打基础,已经学习了变量,流程控制,循环,函数这几块的知识点,就想通过写写小程序来实践一下,来加深知识点的记忆和理解.首先考虑的就是 ...

  2. Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究

    Python进阶----反射(四个方法),函数vs方法(模块types 与 instance()方法校验 ),双下方法的研究 一丶反射 什么是反射: ​ 反射的概念是由Smith在1982年首次提出的 ...

  3. python进阶篇

    python进阶篇 import 导入模块 sys.path:获取指定模块搜索路径的字符串集合,可以将写好的模块放在得到的某个路径下,就可以在程序中import时正确找到. ​ import sys ...

  4. Python进阶(十四)----空间角度研究类,类与类之间的关系

    Python进阶(十四)----空间角度研究类,类与类之间的关系 一丶从空间角度研究类 对象操作对象属性 class A(): address = '沙河' def __init__(self, na ...

  5. python语法(四)— 文件操作

    前面几天学习了一写python的基础语法,也学习了分支if,循环while和for.由于之前已经做过几年的开发了,所以我们知道,许多数据来源并不是靠键盘输入到程序中去的,而是通过数据库和文件来获取到的 ...

  6. Python基础篇(四)_组合数据类型的基本概念

    Python基础篇——组合数据类型的基本概念 集合类型:元素的集合,元素之间无序 序列类型:是一个元素向量,元素之间存在先后关系,通过序号进行访问,没有排他性,具体包括字符串类型.元组类型.列表类型 ...

  7. Python 第一篇:python简介和入门

    一.python简介 1.python下载地址:https://www.python.org/downloads/ Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆 ...

  8. Python 第二篇:python字符串、列表和字典的基本操作方法

    本文基于python 3.5.1 python常见的数据类型有字串.列表.元组.字典等,本文将详细介绍每一种数据类型的操作方法. 一:str字串的操作方法: 1.capitalize()-->  ...

  9. Python 进阶篇

    作者:武沛齐 出处:http://www.cnblogs.com/wupeiqi/articles/5246483.html Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这 ...

随机推荐

  1. flask 的上下文管理

    Flask的上下文对象 Flask有两种Context(上下文),分别是 RequestContext 请求上下文 Request 请求的对象,封装了Http请求(environ)的内容 Sessio ...

  2. 003 Android常见错误汇总

    1.installation failed with message invalid file 解决办法: <1>.点击工具栏上的Build中的Clean Project <2> ...

  3. C. Connect Three Round #528 (Div. 2)【曼哈顿距离】

    一.题面 题目链接 二.分析 这题的关键是要确定一个点是从三个点出发的交汇点,其他的只要结合曼哈顿距离的定义即可明白.因为是三个点,这个交汇点的坐标分别对应的就是x,y值的中值.然后一个小技巧就是曼哈 ...

  4. new Date("2018-01-01 11:11:11").valueOf() 在IE下会返回 NaN

    原因是在ie下 new Date不能处理 小横线 这种时间格式,但是 替换成 斜线就可以正常获得毫秒数,像下面这样: new Date(('2018-01-01 11:11:11').replace( ...

  5. Win10安装MySQL5.7.22解压缩版的方法及手动配置讲解

    1.先去MYSQL官网下载安装包,解压放到C盘 2.新建一个my.ini文件放到bin文件夹下面,内容如下,路径对应自己的安装目录: [mysql] # 设置mysql客户端默认字符集 default ...

  6. n皇后问题--DFS输出棋盘

    N皇后问题 Problem Description 在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上.你的任务是,对 ...

  7. 《STL详解》读书笔记

    vector 向量容器v.insert(v.begin(), num);//增加v.erase(v.begin(), v.end()); //擦除v.erase(v.begin());reverse( ...

  8. SpringBoot---开发的热部署

    1.模板的热部署 在SpringBoot中,模板引擎的页面默认是开启缓存的: 如果修改了页面的内容,则刷新不到修改后的页面: 可以在application.properties中关闭模板引擎的缓存: ...

  9. python list常见用法

    来至builtins.py: def extend(self, iterable): # real signature unknown; restored from __doc__ "&qu ...

  10. BNU29139——PvZ once again——————【矩阵快速幂】

    PvZ once again Time Limit: 2000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java cla ...