本文拷贝了on testing 的《python之文件操作:文件的读写》,只做学习之用

python的文件读写通过

一、用open函数

二、对文件读写操作

三、读取文件位置定位

1. open函数open(file_name[,access_mode][,buffering])

(1)参数说明

open(file_name[,access_mode][,buffering])      打开文件,获得文件的句柄

file_name:包含文件路径的字符串,可以是绝对路径也可以是相对路径,尽量使用绝对路径

access_mode:打开文件的方式:r--只读(默认)   w--写之前清空  a--在原来的内容后写,都是针对字符串

buffering:先写到缓存中,一般省略

(2) 返回值

该语句表示返回的是一个指向文件的指针,文件句柄。当以只读模式打开一个不存在文件时则会报错,

当以写或者追加模式打开一个不存在的文件时,则创建该文件,若文件路径中有目录不存在,则报错

(3)实例

f = open('d:/i_love_xu.txt',w)

2.mode文件操作模式

r,w,a

r+可读可写

w+:打开一个文件用于读写。如果该文件已经存在则将其覆盖。如果该文件不存在,创建新文件

a+:打开一个文件用于读写,如果该文件已经存在,则文件的指针将会放于末尾。文件以追加的模式加在后面,不存在,则创建新文件

rb,wb,ab则用于读取非字符串类型的文件,用二进制形式进行

3.open语句可以对文件进行的其他操作

(1) fp.closed()----判读文件是否关闭,返回True则为关闭

(2)fp.mode----输出读写模式,返回打开文件的访问模式

(3) fp.name --- 返回文件名称

(4)fp.close()----清空内存

(5)----next()   用来读写多个文件的,把文件名放在一个文件中

# for i in fp:
# print i
把一个file用for...in file这样的循环遍历语句时,就是调用next()函数来实现。
文件句柄是一个迭代器???
 
fp=open(fileName,'r')
 
print fp.next()
print fp.next()
print fp.fileno() 判断当前操作的文件句柄是哪一个number
fp.close()

二、对文件作读写操作

1、常规的读写操作
(1)read([size])
size:读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。
 
(2)、readline([size])
调一次读取一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符"\n"。读完一行,文件操作标记移动到下一行的开头。
返回的是字符串
 
(3)、readlines([size])
(3.1)参数
size:指定很小的数字,会不生效,python 默认8k缓存区大小,需要大于8k生效
读取文件的全部内容,这个函数的内部是通过循环调用readline()来实现的
(3.2)返回值
返回的是列表格式,每一行是列表的一个元素,并且结尾会有一个换行符"\n"
 
(4)、writelines(seq)
seq:把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符。
注意:序列中的内容也必须是字符串类型的数据,才能成功写入文件。
 
(5)、write(str)
把str写到文件中,默认是不加换行符的,所以如果想换行的话,得手动加入换行符'\n'。

2、使用linecache模块读取文件

import linecache
允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
(1)linecache.getlines(filename,lineno)
从名为 filename 的文件中得到第 lineno 行。
这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里)。
如果文件没有找到,这个函数将会在 sys.path 搜索。
(2)linecache.getlines(filename) 返回列表
从名为 filename 的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以 linenum-1 为元素在列表中的位置存储
(3)linecache.clearcache()
清除缓存,如果你不再需要先前从 getline() 中得到的行
(4)linecache.checkcache([filename])
检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。
如果省略 filename,将检查缓存里的所有条目。
(5)linecache.updatecache(filename)
更新文件名为 filename 的缓存。如果 filename 文件更新了,使用这个函数可以更新
linecache.getlines(filename)返回的列表。
 
另:读取文件之后你不需要使用文件的缓存时需要在最后清理一下缓存,使linecache.clearcache()清理缓存,释放缓存。
这个模块是使用内存来缓存你的文件内容,所以需要耗费内存,打开文件的大小和打开速度和你的内存大小有关系。
打印奇数行的文件:
fp='e:\\tmp\\05.txt'
list1=linecache.getlines(fp)
for i in list1[::2]:
print i

三、读取文件的位置定位

1、tell()
返回当前操作文件读取到的位置
一个中文:3个字节
Windows下‘\r\n’(换行符)占两个字节,Linux下\n mac下\r.
2、seek(offset[,from]) 移动游标到想去的位置
from:,默认是0,2:从末尾开始计算偏移;1:从当前位置作为标准位置
offset:移动的总距离,可以是正数,可以为负数
 
三、读取文件的位置定位

1、tell()
返回当前操作文件读取到的位置
一个中文:3个字节
Windows下‘\r\n’(换行符)占两个字节,Linux下\n mac下\r.
2、seek(offset[,from]) 移动游标到想去的位置
from:,默认是0,2:从末尾开始计算偏移;1:从当前位置作为标准位置
offset:移动的总距离,可以是正数,可以为负数

python学习8 文件的操作的更多相关文章

  1. python学习笔记---文件的操作

    数据的保存: 1.内存:常用的变量2.文件:文本内容,二进制的文件内容3.数据库: 读文件:1.要读取的文件路径一定要存在.2.打开存在的文件:open函数    参数1:文件的路径,相对的或者是绝对 ...

  2. python学习之文件读写操作

    open函数 在使用文件之前,需要先打开,即使用open函数 如: files=open("文件路径","操作方式") 解释如下: (1.files:为文件对象 ...

  3. python学习9—文件基本操作与高级操作

    python学习9—文件基本操作与高级操作 1. 文件基本操作 打开文件,获得文件句柄:f = open('filename',encoding='utf-8'),open会查询操作系统的编码方式,并 ...

  4. python学习笔记:文件操作和集合(转)

    转自:http://www.nnzhp.cn/article/16/ 这篇博客来说一下python对文件的操作. 对文件的操作分三步: 1.打开文件获取文件的句柄,句柄就理解为这个文件 2.通过文件句 ...

  5. python学习总结---文件操作

    # 文件操作 ### 目录管理(os) - 示例 ```python # 执行系统命令 # 清屏 # os.system('cls') # 调出计算器 # os.system('calc') # 查看 ...

  6. Python学习笔记——文件操作

    python中,一切皆对象.   一.文件操作流程 (1)打开文件,得到一个文件句柄(对象),赋给一个对象: (2)通过文件句柄对文件进行操作: (3)关闭文件. 文件对象f通过open()函数来创建 ...

  7. Python学习之==>文件操作

    1.打开文件的模式 r,只读模式(默认)[不可写:文件不存在,会报错] w,只写模式[不可读:不存在则创建:存在则删除内容] a,追加模式[不可读:不存在则创建:存在则追加内容] r+,读写模式[可读 ...

  8. [Python学习笔记]文件的读取写入

    文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...

  9. Python学习--13 文件I/O

    Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系 ...

随机推荐

  1. Vue2.0 多种组件传值方法-不过如此的 Vuex

    码文不易啊,转载请带上本文链接呀,感谢感谢 https://www.cnblogs.com/echoyya/p/14404397.html 在vue项目中了解组件间通讯很重要,也是最基础的面试题,可以 ...

  2. 016.NET5_MVC_视图组件扩展定制

    视图组件 1. 呈现页面响应的某一部分而不是整个响应 2. 包括在控制器和视图之间发生的关注分类和可测试优势 3.可以具有参数和业务逻辑 4. 通常在页面局部调用 如何自定义视图组件? 1.Razor ...

  3. Chrome DevTools & Slow 3G Network

    Chrome DevTools & Slow 3G Network shortcuts https://developers.google.com/web/tools/chrome-devto ...

  4. Markdown & Static Site Generator

    Markdown & Static Site Generator https://www.gitbook.com/ https://vuepress.vuejs.org/ https://ww ...

  5. 比特币跌破3.5万美元,巨鲸们将目光瞄向SPC算力币

    比特币最近又迎来了大幅下跌,截至周三(1月20日),比特币跌幅超过5%,跌破3.5万美元.很显然,比特币没有预期那样顺顺利利地登顶4万美元,反而又出现了回调迹象.有些巨鲸们在大肆囤币,然而也有些巨鲸们 ...

  6. django学习-11.开发一个简单的醉得意菜单和人均支付金额查询页面

    1.前言 刚好最近跟技术部门的[产品人员+UI人员+测试人员],组成了一桌可以去公司楼下醉得意餐厅吃饭的小team. 所以为了实现这些主要点餐功能: 提高每天中午点餐效率,把点餐时间由20分钟优化为1 ...

  7. [转]【视觉 SLAM-2】 视觉SLAM- ORB 源码详解 2

    转载地址:https://blog.csdn.net/kyjl888/article/details/72942209 1 ORB-SLAM2源码详解 by 吴博 2 https://github.c ...

  8. 我ssh框架遇到报错及处理方式

    Exception encountered during context initialization - cancelling refresh attempt 修改hbm.xml后遇到的问题,错误可 ...

  9. 通过CollectionUtils工具类判断集合是否为空,通过StringUtils工具类判断字符串是否为空

    通过CollectionUtils工具类判断集合是否为空 先引入CollectionUtils工具类: import org.apache.commons.collections4.Collectio ...

  10. 完全基于node的web应用

    完全基于node的web应用 node js web fs fs文件路径 事实上通常"正确的方式"一般都不简单. 用例 模块 基本http服务器 基于事件驱动回调 模块化serve ...