先看看官方说明:

The default mode is 'r' (open for reading text, synonym of 'rt'). For binary read-write access, the mode 'w+b' opens and truncates the file to 0 bytes. 'r+b' opens the file without truncation.

As mentioned in the Overview, Python distinguishes between binary and text I/O. Files opened in binary mode (including 'b' in the mode argument) return contents as bytes objects without any decoding.
In text mode (the default, or when 't' is included in the mode argument), the contents of the file are returned as str, the bytes having been first decoded using a platform-dependent encoding or using the specified encoding if given.

r、w、a 为打开文件的基本模式,分别对应只读、只写、追加模式。

b、t、+ 与以上的文件打开模式组合使用,分别对应二进制模式,文本模式,读写模式。

整理一下:

———————————————————————————————————————————————————————————————————————————————————————
mode | 描述
———————————————————————————————————————————————————————————————————————————————————————
r | 以只读方式打开文件(默认),如果文件不存在,则抛出FileNotFoundError异常
———————————————————————————————————————————————————————————————————————————————————————
w | 以只写方式打开文件。指针在开头,文件不存在时创建,文件存在时,则清空再写入新内容。
———————————————————————————————————————————————————————————————————————————————————————
a | 以追加只写方式打开文件,指针移到文件末尾。文件不存在时创建。
———————————————————————————————————————————————————————————————————————————————————————
x | 以追加方式打开文件,文件不存在时创建,文件存在时抛出FileExistsError异常。
———————————————————————————————————————————————————————————————————————————————————————
r+ | 读写,指针在开头,可以写到文件任何位置
———————————————————————————————————————————————————————————————————————————————————————
w+ | 读写,清空文件内容
———————————————————————————————————————————————————————————————————————————————————————
a+ | 读写,追加,只能写在文件末尾
———————————————————————————————————————————————————————————————————————————————————————

打开文件

f = open('path','mode')

将内存数据写入文件

f.flush()

关闭文件

f.close()

创建一个文件

# vim users.txt
keith1:18:110
keith2:19:111
keith3:20:112
keith4:21:113

查看帮助文档

>>> f=open('users.txt')
>>> type(f)
<class '_io.TextIOWrapper'> >>> help(open)
>>> help(f) >>> dir(f)
['_CHUNK_SIZE', '__class__', '__del__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattribute__', '__getstate__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_checkClosed', '_checkReadable', '_checkSeekable', '_checkWritable', '_finalizing', 'buffer', 'close', 'closed', 'detach', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'line_buffering', 'mode', 'name', 'newlines', 'read', 'readable', 'readline', 'readlines', 'seek', 'seekable', 'tell', 'truncate', 'writable', 'write', 'writelines']

在对文件进行操作后,一定要牢记一件事情:file.close()。

如果不关闭,它还驻留在内存中,后面又没有对它的操作,既浪费内存空间,也增加了文件的安全风险。

有另一种方法能够不用手动close()文件,那就是使用with的方式打开文件。

>>> with open('users.txt') as f:
... print(f.read())
...
keith1:18:110
keith2:19:111
keith3:20:112
keith4:21:113

读文件

f.read(size)         读取文件size个字节内容,返回字符串。如果不指定size,则读取全部内容。
f.readline(size) 读取文件一行size个字节,返回字符串。如果不指定size,则显示一整行。
f.readlines(hint) 读取文件所有行,返回列表。如果hint小于一行的字符数则读取一行,如果hint大于一行小于两行字符数则读取两行,以此类推。
>>> help(f.read)
Help on built-in function read: read(size=-1, /) method of _io.TextIOWrapper instance
Read at most n characters from stream. Read from underlying buffer until we have n characters or we hit EOF.
If n is negative or omitted, read until EOF.
>>> help(f.readline)
Help on built-in function readline: readline(size=-1, /) method of _io.TextIOWrapper instance
Read until newline or EOF. Returns an empty string if EOF is hit immediately.
>>> help(f.readlines)
Help on built-in function readlines: readlines(hint=-1, /) method of _io.TextIOWrapper instance
Return a list of lines from the stream. hint can be specified to control the number of lines read: no more
lines will be read if the total size (in bytes/characters) of all
lines so far exceeds hint.
>>> f.read()
'keith1:18:110\nkeith2:19:111\nkeith3:20:112\nkeith4:21:113' >>> f.readline()
'keith1:18:110\n' >>> f.readlines()
['keith1:18:110\n', 'keith2:19:111\n', 'keith3:20:112\n', 'keith4:21:113']

在python中,'\n'表示换行,这也是unix系统中的规范。但是在windows系统中,用'\r\n'表示换行。不过还好,python在处理的时候,会自动将'\r\n'转换为'\n'。

遍历文件

>>> f=open('users.txt')
>>> for line in f:
... print(line, end='')
...
keith1:18:110
keith2:19:111
keith3:20:112
keith4:21:113

for循环是一行一行地读取文件内容,每次扫描一行,遇到结束符号\n表示本行结束。

文件指针

指针就是文件操作的位置。

获取指针当前位置

>>> help(f.tell)
Help on built-in function tell: tell() method of _io.TextIOWrapper instance
Return current stream position.

移动指针

>>> help(f.seek)
Help on built-in function seek: seek(cookie, whence=0, /) method of _io.TextIOWrapper instance
Change stream position. Change the stream position to the given byte offset.
The offset is interpreted relative to the position indicated by whence.
Values for whence are: * 0 -- start of stream (the default); offset should be zero or positive 默认为起始位置,偏移量为0或者正数。
* 1 -- current stream position; offset may be negative 当前位置,偏移量可以是负数。
* 2 -- end of stream; offset is usually negative 结束位置,偏移量通常是负数。 Return the new absolute position.

cookie表示相对whence的偏移量。

whence表示从何处开始。

>>> f=open('users.txt')
>>> f.tell()
0
>>> f.read(2)
'ke'
>>> f.tell()
2
>>> f.read(3)
'ith'
>>> f.tell()
5
>>> f.seek(0)
0
>>> f.tell()
0

需要注意的是,seek移动指针之前默认先会调用flush。

参考:

https://docs.python.org/3/library/functions.html#open

https://docs.python.org/3/library/io.html#io.TextIOBase.seek

http://www.runoob.com/python/file-seek.html

https://docs.python.org/3/library/io.html#io.IOBase.writelines

文件操作,内置函数open()的更多相关文章

  1. [转]python file文件操作--内置对象open

    python file文件操作--内置对象open   说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前 ...

  2. python file文件操作--内置对象open

    说明: 1. 函数功能打开一个文件,返回一个文件读写对象,然后可以对文件进行相应读写操作. 2. file参数表示的需要打开文件的相对路径(当前工作目录)或者一个绝对路径,当传入路径不存在此文件会报错 ...

  3. 「Python」字符串操作内置函数

    目录: capitalize casefold center count encode decode endswith expandtabs find format format_map index ...

  4. 使用R内置函数操作数据框

    我们已经学习了数据框的基础,这里回顾一下用于筛选数据框的内置函数.尽管数据框本质上是一个由向量构成的列表,由于各列长度相同,所以可以将其看作矩阵进行访问和操作.选择满足特定条件的行,需要为 [ ] 的 ...

  5. 【原创】Matlab.NET混合编程技巧之找出Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 Matlab与.N ...

  6. Matlab.NET混编技巧之——找出Matlab内置函数

    原文 http://www.cnblogs.com/asxinyu/p/3295309.html Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯 定不难.反之,有时 ...

  7. Matlab.NET混合编程技巧之——找出Matlab内置函数

    原文:[原创]Matlab.NET混合编程技巧之--找出Matlab内置函数 Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破 ...

  8. Matlab内置函数

    [原创]Matlab.NET混编技巧之——找出Matlab内置函数   Matlab与.NET的混合编程,掌握了基本过程,加上一定的开发经验和算法基础,肯定不难.反之,有时候一个小错误,可能抓破脑袋, ...

  9. python语法基础-函数-内置函数和匿名函数-长期维护

    ##################     内置函数        #######################  """ 一共是 68个内置函数: 反射相关的内置函 ...

  10. set、def、lambda、内置函数、文件操作

    set : 无序,不重复,可以嵌套 .add (添加元素) .update(接收可迭代对象)---等于批量 添加 .diffrents()两个集合不同差 .sysmmetric difference( ...

随机推荐

  1. web安全入门课程笔记——SQL漏洞分析与利用

    3-1SQL语言基础 3-2ACCESS手工注入 And1=1是什么意思:进入数据库查询信息,判断是否存在注入点. Exists(select*from admin):查询语句 3-6MySQL手工注 ...

  2. 20155202张旭 Exp4 恶意代码分析

    20155202张旭 Exp4 恶意代码分析 实验前问题回答: 一:如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来 ...

  3. angularJs 技巧总结及最佳实践

    强烈建议通读官方wiki文档,里面包含了FAQ,最佳实践,深入理解最核心的Directive及Scope等文章, 基础 1. 使用ng-repeat指令,为防止重复值发生的错误.加上track by ...

  4. 利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码

    首先要在eclipse 中启用 启用以后在 resource 中生成了 rebel-remote.xml 然后build,把生成的jar包放到服务器上. 然后用下面的命令启动 java -agentp ...

  5. java批量爬取电影资源

    摘要 网上有很多个人站来分享电影资源,其实有时候我们自己也想做这个一个电影站来分享资源.但是这个时候就有一个问题,电影的资源应该从哪里来呢?难道要自己一条条手动去从网络上获取,这样无疑是缓慢而又效率低 ...

  6. 移动端三合一瀑布流插件(原生JS)

    没有前言,先上DEMO(手机上看效果更佳)和 原码. 瀑布流形式的图片布局方式在手机等移动端设备上运用广泛,比较常见的是下面前两种: 一.等宽等高 这种形式实现起来非常容易,这里就不再多说. 二.等宽 ...

  7. JMeter:生成漂亮的接口/压力测试的HTML报告

    JMeter生成HTML网页报告(非gui模式操作) 我们做性能测试的时候会经常使用一些性能测试工具,比如loardrunner和jmeter,我个人比较喜欢Jmeter这个工具,jmeter之前版本 ...

  8. c# 简易绘制C语言头文件包含关系图 v2.0

    老规矩,先上图 节点样式说明: 1.粉色圆角,说明该节点下有循环引用 2.黄色菱形,说明该节点代表的文件在项目目录下未找到. 3.红色圆角,说明循环引用(从开始到最终,这种感情没变过,没有谁..... ...

  9. 作业要求20160901 从edu.cnblogs.com中抄过来的,备忘

    [已完成] 杨贵福 发布于 2016-09-01 21:51 开通技术博客,博客园 cnblogs 关注 杨贵福 younggift,回贴 "构建之法东北师大站,继续 2016秋" ...

  10. 《Linux内核分析》第二周学习报告

    <Linux内核分析>第二周学习报告 ——操作系统是如何工作的 姓名:王玮怡  学号:20135116 第一节 函数调用堆栈 一.三个法宝 二.深入理解函数调用堆栈 三.参数传递与局部变量 ...