读文件
语法:def open(file, mode=‘r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True)
- 参数file注意事项
- 文件路径是一个字符串(包括你要读取的文件名和文件后缀名)
- 路径中”/”或者 “\”表示下级。(”\”中第一个”\”是转义符)
- 路径可以是绝对路径和相对路径(如果路径里只有文件名,则表示的是相对路径,相当于和该python文件是同级存储)
- 参数mode注意事项
- r: 读
- rb: 读二进制
- r+: 读写
- rb+: 读二进制
- w: 写
- wb: 写二进制
- w+: 读写
- wb+: 写二进制
- a:附加写方式打开,不可读
- a+: 附加读写方式打开
- ab:附加写方式打开,不可读 (二进制)
- ab+: 附加读写方式打开
- 参数encoding:字符编码注意事项
- GBK:仅在中国通用
- Utf-8:万国通用码
- Ascii
- gb2312
关文件
file.close()
方法用于关闭一个已打开的文件。关闭后的文件不能再进行读写操作, 否则会触发 ValueError 错误。 close() 方法允许调用多次。
当 file 对象,被引用到操作另外一个文件时,Python 会自动关闭之前的 file 对象。 使用 close() 方法关闭文件是一个好的习惯。
补充:这时候print(“file”)的返回值是None
文件相关操作
- file.flush()
用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。 - file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型),可用于底层操作系统的 I/O 操作。
在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件、目录文件、链接文件和设备文件。文件描述符(file descriptor)是内核为了高效管理已被打开的文件所创建的索引,其是一个非负整数(通常是小整数),用于指代被打开的文件,所有执行I/O操作的系统调用都通过文件描述符。程序刚刚启动的时候,0是标准输入,1是标准输出,2是标准错误。如果此时去打开一个新的文件,它的文件描述符会是3。POSIX标准要求每次打开文件时(含socket)必须使用当前进程中最小可用的文件描述符号码,因此,在网络通信过程中稍不注意就有可能造成串话 - file.isatty()
检测文件是否连接到一个终端设备,如果是返回 True,否则返回 False。 - file.next()
python 3 的内置函数 next() 通过迭代器调用 next() 方法返回下一项。 在循环中,next()方法会在每次循环中调用,该方法返回文件的下一行,如果到达结尾(EOF),则触发 StopIteration - file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有。 - file.readline([size])
用于从文件读取整行,包括 “\n” 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 “\n” 字符。
如果size 超出了当前行的字符长度,则只显示当前行,不会显示下一行的字符,但是光标的位置是下一行的开始 - file.readlines([sizeint])
用于读取所有行(直到结束符 EOF)并返回列表,该列表可以由 Python 的 for… in … 结构进行处理。 如果碰到结束符 EOF 则返回空字符串。
若有sizeint参数时候:
若Sizeint小于第一行长度(一个字符和汉字都长度都为1)则打印第一行的所有内容,若sizeint大于第一行长度小于第二行长度(换行是长度加1,不加2,计算光标时才加2)则打印第一行和第二行所有的内容,以此类推。 - file.seek(offset[, whence])
offset – 开始的偏移量,也就是代表需要移动偏移的字节数
whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。 - file.tell()
方法返回文件的当前位置,即文件指针当前位置。 - file.truncate([size])
用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。 - file.write(str)
用于向文件中写入指定字符串。
在文件关闭前或缓冲区刷新前,字符串内容存储在缓冲区中,这时你在文件中是看不到写入的内容的。
如果文件打开模式带 b,那写入文件内容时,str (参数)要用 encode 方法转为 bytes 形式,否则报错:TypeError: a bytes-like object is required, not ‘str’。 - file.writelines(sequence)
向文件中写入一序列的字符串。这一序列字符串可以是由迭代对象产生的,如一个字符串列表。换行需要制定换行符 \n。
补充及案例
-
file = open("C:\\Users\\Administrator\\Desktop\\001.txt", "r") data = file.read(30) print(file.name) print(data) file.close()
read(10)代表着读取文件的长度,如果不设置则全部读取(汉子也算一个长度)
file.name 代表着所读文件的文件名
补充:这时候print(“file”)的返回值是001.txt中文件字符串的长度 -
for i in file: print(i, end="\r") file.close()
实行结果:
街
灯1
下你
是风1
又似画s,
恍若灯火处的画中仙
不食人间烟火,又让人
难以靠近。
1323465465465465 -
for i in file: print(i, end="\r") print(9999999999, end="") file.close()
实行结果:
街
灯1
下你
是风1
又似画s,
恍若灯火处的画中仙
不食人间烟火,又让人
难以靠近。
9999999999
结论:- 读文件时候print(i, end="\r") 读完后将光标移动到开始,但是前面没有被覆盖掉,因为读完一行后,Pycharm打印面板上的光标移动到当前行的第一个,但是读取文件中的光标换行,打印面板中的光标就换行了,继续打印,没有影响。
- 读取到文件最后一行时候,光标移动到当前行的第一行,文件结尾时,读取文件中的光标不会换行,在执行print(9999999999, end="")时候就将文件中的最后一行覆盖掉。
- end="\r" 指的是打印面板的光标,和文件中的光标没有关系。
- print(file.readline(1)) 数字代表读取该行中的前几个字符,无参时读取整行数据
print(file.readlines(1)) 数字要读取到的字符总数,参数如果超过一行的总数,则自动读取下一行,作为下一个列表元素。无参时读取所有数据等价于read,但返回值是每行组成一个元素(元素末尾是”\n”结束)的列表eg [‘街\n’, ‘灯1\n’]
-
写文件
file = open("C:\\Users\\Administrator\\Desktop\\002.txt", mode="w")
如果文件不存在,则新建一个文件,如果存在,则覆盖后写文件
要写入特定编码的文本文件,请给open()函数传入encoding参数,将字符串自动转换成指定编码