文件打开,读写和关闭的顺序:

打开文件;# 打开后才能进行读写

读文件或写文件;

文件关闭。# Python会缓存写入的数据,如果程序异常崩溃,数据就不能写入到文件当中。安全起见,文件用完后要主动关闭文件。

文件的打开

file_obj=open(filename, mode='r', buffering=-1,..)

filename是文件名(或路径),为强制参数,其他参数是可选的。

mode表示模式,为可选参数,默认值为r,即read(读)。

buffering表示是否需要缓冲,为可选参数,默认值为-1,表示使用系统默认的缓冲区大小。(0代表不缓冲,>=1的值表示缓冲一行或指定缓冲区大小)。

用help(open)查看其他参数。退出help()的方法:q。

>>> f1 = open ('test1.txt') # 从test1.txt中读数据,使用系统默认的缓冲区大小。

>>> f2 = open ('test2.txt','w')

# 若test2.txt存在,则清空该文件内容,准备写入新内容;若该文件不存在,则新建文件test2.txt,准备写入新内容。

>>> f3 = open ('record.dat','wb',0)

# 写一个二进制文件record.dat,不缓冲。说明:Python中,只有二进制文件可以不使用缓冲,而文本文件必须要使用缓冲。

open函数的mode参数:

r - 读,文件必须存在。

w - 写,清空文件内容或新建一个文件。

a - 追加,在文件尾部加内容。

r+ 等同于 r+w,可不清空原内容

w+ 等同于 = w+r

a+ 等同于 = a+r

二进制文件的读、写、追加:

rb - 读, rb+ = rb+w

wb - 写, wb+ = wb+r

ab - 追加, ab+ = ab+r

文件相关函数

open()函数的返回值 -

1. open()函数返回一个文件(file)对象。

2. 文件对象可迭代,因此可遍历其中的每一个子项。

3. 有关闭和读写文件相关的方法(即跟对象有关的函数)。

对象名.方法名()

- f.read(), f.write(), f.readline(), f.readlines(), f.writelines()

- f.close()

- f.seek()

写文件 - f.write()

file_obj.write (str)

- 将一个字符串写入文件

传统写法(不推荐)

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

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

>>> f.close ()

with语句(推荐使用)# 执行后主动关闭文件句柄,因而在程序当中不需要另外写上f.close()关闭文件。

>>> with open ('test.txt', 'w') as f:

f.write ('Hello, World!')

读文件 - f.read()

file_obj.read(size) # 从文件中至多读出size字节数据,返回一个字符串

file_obj.read()# 将当前位置直到文件结束的数据全部读出,返回一个字符串

>>> with open ('/Users/Yangyang/Desktop/test.txt','r') as f:

... a = f.read(5) # 先读出5个字节

... b = f.read() # 再将余下的字节读出来

>>> a

'Hello'

>>> b

', World!'

读取一行数据 - f.readline()

读取多行数据 - f.readlines()

写入多行数据 - f.writelines()

>>> with open ('/Users/Yangyang/Desktop/test.dat') as f:

... ln = f.readlines()

... print (ln)

Output:

['我来到的地方n', '有着悠久的历史和古老的传说n', '有着朝圣者的荒漠古道和挺立于心中的神女雪峰n', '他们圣洁的祷告n', '使树木狂舞 流水欢歌n', '我听见一个灵魂在抽泣n']

# 返回结果是一个列表,n是换行符。Python在文件中读取行的时候并不删除换行符。

脚本示例:

将文件test.dat的字符串前加上序号1、2、3...后写到另一个文件stest.dat中。

文件指针指向我们需要的位置 - f.seek()

在读写文件的时候都有一个文件指针,数据从文件指针所在的位置开始读写。

file_obj.seek(offset, whence=0)

在文件中移动文件指针,从whence偏移offset个字节

offset - 偏移量

whence - 起始位置,默认值是0 (0 - 文件头部, 1 - 当前位置, 2 - 文件尾部)

f.seek(0,0) 或者f.seek(0) - 把文件指针移到文件开头

f.seek(1,50) - 把文件指针往后移动50个字节

脚本示例:

在stest.dat文件中追加字符串s = 'Poem by Mang Lin'.

- readlines产生错误结果:

- 通过writelines写入数据,此时文件指针已经在文件尾部,再用readlines读数据就会产生不正确的结果。

- readlines产生正确结果:

- 在writelines后添加一行 f.seek(0)

练习:

转载本文请联系原作者获取授权,同时请注明本文来自刘洋洋科学网博客。

链接地址:http://blog.sciencenet.cn/blog-3031432-1060080.html

上一篇:Python: 异常处理try-except语句和with语句

下一篇:Python: 标准文件/标准输入输出

python打开dat文件_科学网—Python: 文件的打开,读写和关闭 - 刘洋洋的博文相关推荐

  1. python频次统计图_科学网—Python小例:统计文本中单词出现的频次 - 康建的博文...

    import re zen=''' The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better ...

  2. python做社会网络分析_科学网-python 社会网络分析工具之igraph-郗强的博文

    1.networkx 2.igraph 3.SNAP 2.igraph igraph是免费的复杂网络(graphs)处理包,可以处理百万级节点的网络(取决于机器内存).igraph提供了R和C语言程序 ...

  3. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...

    (一)算数运算符 数字2 是一个整数的例子. 长整数 不过是大一些的整数. 3.23和52.3E-4是浮点数的例子.E标记表示10的幂.在这里,52.3E-4表示52.3 * 10-4. (-5+4j ...

  4. python word模板 图_科学网—Python绘制可插入Word的高清矢量图(SVG转EMF) - 任晓东的博文...

    Python具有强大的绘图功能.在科学论文中通常需要矢量图,而且如果能方便的插入到word中更好.Python中自带的绘图库matplotlib可以将图保存成svg格式,但是我通常喜欢使用emf的矢量 ...

  5. python社会网络分析教授_科学网—python 社会网络分析工具之networkx - 郗强的博文...

    1.networkx 2.igraph 3.SNAP 1.networkx NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网络分析算法,可以方便的进行复杂网 ...

  6. linuxcnc 多轴联动_科学网—【LinuxCNC】开源机床Linux操作系统 - 刘洋的博文

    LinuxCNC是昨天意外发现的一款开源实时Linux机床操作系统,实际上也适合做机器人.机器手的操作系统:重点是[实时RealTime Linux系统].官方网站: 这款系统运行于X86结构的CPU ...

  7. python读取hdf5文件_科学网—python读hdf5文件 - 钱磊的博文

    读hdf5文件和读fits差不多,需要知道类似文件头的东西,这里是一个变量的名称.这可以通过定义一个prt函数结合h5py报的工具来实现如下 def prt(name): print(name) fi ...

  8. python画矢量图_科学网—Python绘制可插入Word的高清矢量图(SVG转EMF) - 任晓东的博文...

    Python具有强大的绘图功能.在科学论文中通常需要矢量图,而且如果能方便的插入到word中更好.Python中自带的绘图库matplotlib可以将图保存成svg格式,但是我通常喜欢使用emf的矢量 ...

  9. python多因素方差分析_科学网—Python学生物统计---方差分析---学习笔记7 - 邓飞的博文...

    OLS: 最小二乘法from scipy import stats import pandas as pd import numpy as npfrom statsmodels.formula.api ...

最新文章

  1. 在CentOS 7中安装与配置Tomcat-8方法
  2. Global.asax详解
  3. OKR的本质是什么?目标如何制定?
  4. svn: Checksum mismatch while updating 'D:\workspace\demo\test\.svn\text-base\test.php.svn-base'
  5. 2010年杭电计算机研究生复试---笔试编程
  6. 使用sklearn进行数据预处理 —— 归一化/标准化/正则化
  7. Swift基础之方法实战
  8. java对字符串归一化_搜索引擎中的字符串归一化 | 学步园
  9. django+xadmin在线教育平台(十二)
  10. 什么是数字孪生?有哪些关键能力?
  11. java生成pdf417_生成PDF417的JAVA包.rar
  12. 7-1 宿舍谁最高? (20 分)
  13. mysql5.5默认引擎,在MySQL5.5以上系统中,默认的存储引擎是( )。
  14. U8普及版在win7系统中,UFO报表一点打印或预览就报错
  15. oracle sqldeveloper 115网盘 提取码
  16. 360浏览器怎么设置主页
  17. 零基础英语语法速成(一)
  18. 【economic】程序员外包平台
  19. 中望3d快捷键命令大全_中望3D快捷键设置
  20. ​什么是bug?bug的源头在哪里?

热门文章

  1. 51控制DM542驱动电机程序
  2. 铲子哥,可在CentOS安装mysql数据库时铲土填坑
  3. 第一次做学年设计 学生成绩管理系统
  4. 校招必看硬核干货:IC前端这样学,秒变offer收割机!
  5. 机箱主板跳线接法详解(图) (机箱面板的POWER LED线,POWER SW线,HD线,RESET线,usb线)
  6. 分享Silverlight/WPF/Windows Phone一周学习导读(05月16日-05月21日)
  7. Allure标记的使用
  8. 2021.11浙江高考成绩查询,2021浙江教师资格证
  9. Midas—预应力混凝土连续梁桥自动设计程序
  10. 2022年,还能转行数据分析师吗