1.打开文件

位于自动导入的模块IO中,无需手动导入。

f = open('D:\M\test.txt')

若文件不存在,则报错

Traceback (most recent call last):
File "d:\M\github\Python\Demo\t14.py", line 1, in <module>
f = open('D:\M\test.txt')
^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: 'D:\\M\test.txt'

1.1 文件模式

只指定文件名的话,会得到一个可读文件对象。若想写入文件,必须通过添加参数来指出。

'r'	以只读方式打开文件。文件的指针将会放在文件的开头,这是默认模式。
'w' 以写入方式打开文件。如果文件存在则覆盖,如果文件不存在则创建一个新文件。
'a' 以追加模式打开文件。如果文件存在,则在文件末尾追加写入,如果文件不存在则创建一个新文件。
'x' 以独占方式创建文件,如果文件已经存在则返回 FileExistsError 错误。
'b' 以二进制模式打开文件。
't' 以文本模式打开文件(默认模式)。
'+' 可读写模式(可与其他模式组合使用)。
  • 默认模式为rt,将把文件视为Unicode文本,自动执行解码和编码,且默认使用UTF-8编码。

  • 可以使用关键字参数encodingerrors

  • 若文件为声音图片视频之类的,可以使用二进制模式来禁用与文本相关的功能。、

2.文件的基本方法

2.1 读取和写入

f.write

f = open('test.txt', 'w')
f.write('Hello')
f.close # 记得关闭

f = open('test.txt', 'r')
str1 = f.read(4) # 读取前4个字符 指针到达第5个字符
print(str1)
str1 = f.read() # 从第五个字符开始读取
print(str1)
>
Hell
o

若想让指针回到起始位置,用f.seek(0)

f = open('test.txt', 'r')
str1 = f.read(4)
print(str1)
f.seek(0) # 指针回溯
str1 = f.read()
print(str1)
>
Hell
Hello

2.2 成行地读取和写入

2.2.1 读取方法readline

可以不提供参数,读取一行后返回

test.txt 文件内容为

注意:文件中每一行都有一个换行符,读取时,换行符也会被读取

f = open('test.txt', 'r')
str1 = f.readline()
str2 = f.readline()
print(str1)
print(str2)

运行结果

Hello

Bob

想要不读取换行符,可用strip()

f = open('test.txt', 'r')
str1 = f.readline().strip()
str2 = f.readline().strip()
print(str1)
print(str2)

运行结果

Hello
Bob

可以指定读取字符数量

f = open('test.txt', 'r')
str1 = f.readline(5)
print(str1)
> Hello

读取文件所有行,以列表返回 readlines

f = open('test.txt', 'r')
str1 = f.readlines()
print(str1)
> ['Hello\n', 'Bob\n', 'bye']

默认状态下,VSCode不会即时保存,需要先将test.txt保存,再运行程序

2.2.2 写入方法 writeline

先擦除所有内容,然后再写入

运行前,test.txt文件内容

f = open('test.txt', 'w')
f.writelines('good')
f.close

运行后

写入时,不会自动添加换行符,需要自己添加,没有writeline方法,可以使用write

f = open('test.txt', 'w')
f.write('middle')
f.writelines('bad\n')
f.writelines('good')
f.close

运行结果

2.3 记得关闭文件!

可以使用 try/finally 语句,再finally中调用close

try:
f = open('test.txt', 'w')
f.write('middle')
f.writelines('bad\n')
f.writelines('good')
finally:
f.close

还可以使用with语句关闭

# 将文件对象赋给test
with open('test.txt', 'w') as test:
test.write('middle')

运行后文件自动关闭

3.迭代文件内容

3.1 每次一个字符

with open('test.txt', 'r') as f:
while True:
char = f.read(1)
if not char: break
print(char, end=' ')

文件内容:

运行结果

C h i n a

3.2 每次一行

文件内容

with open('test.txt', 'r') as f:
while True:
str = f.readline().strip() # 去掉换行符
if not str: break
print(str, end=' ')
> China is the best

3.3 读取所有内容

with open('test.txt', 'r') as f:
str = f.read()
print(str, end=' ')

运行结果

China
is
the
best

3.4 延迟行迭代fileinput

fileinput 可以轻松地处理多个输入流,包括文件、标准输入流等,同时还支持行迭代和缓冲流处理。还可以对大型文件(几个TB)进行处理。

常见的使用方式包括:

  • 逐行读取文件中的数据,例如上面提到的例子。
  • 处理多个文件,例如通过 glob 模块来指定需要处理的文件列表。
  • 实现管道功能,例如通过 subprocess 模块来实现将命令的输出作为输入流来处理。

文件内容

# 逐行读取文件并统计出现次数
for line in fileinput.input('test.txt'):
key = line.strip()
counts[key] = counts.get(key, 0) + 1 # 输出统计结果
for key, value in counts.items():
print(key, '--', value)

运行结果

1 -- 3
2 -- 2
3 -- 1
4 -- 1

python笔记:第十二章文件的更多相关文章

  1. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  2. 进击的Python【第十二章】:mysql介绍与简单操作,sqlachemy介绍与简单应用

    进击的Python[第十二章]:mysql介绍与简单操作,sqlachemy介绍与简单应用 一.数据库介绍 什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库,每个数 ...

  3. python 教程 第十二章、 标准库

    第十二章. 标准库 See Python Manuals ? The Python Standard Library ? 1)    sys模块 import sys if len(sys.argv) ...

  4. [CSAPP笔记][第十二章并发编程]

    第十二章 并发编程 如果逻辑控制流在时间上是重叠,那么它们就是并发的(concurrent).这种常见的现象称为并发(concurrency). 硬件异常处理程序,进程和Unix信号处理程序都是大家熟 ...

  5. python 教程 第二十二章、 其它应用

    第二十二章. 其它应用 1)    Web服务 ##代码 s 000063.SZ ##开盘 o 26.60 ##最高 h 27.05 ##最低 g 26.52 ##最新 l1 26.66 ##涨跌 c ...

  6. o'Reill的SVG精髓(第二版)学习笔记——第十二章

    第十二章 SVG动画 12.1动画基础 SVG的动画特性基于万维网联盟的“同步多媒体集成语言”(SMIL)规范(http://www.w3.org/TR/SMIL3). 在这个动画系统中,我们可以指定 ...

  7. Python基础学习笔记(十二)文件I/O

    参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-files-io.html ▶ 键盘输入 注意raw_input函 ...

  8. Java笔记(十二) 文件基础技术

    文件基础技术 一.文件概述 一)基本概念 1.文件的分类: 1)文本文件:文件中每个二进制字节都是某个可打印字符的一部分.如.java文件 2)二进制文件:文件中每个二进制字节不一定用来表示字符,也可 ...

  9. Python开发【十二章】:ORM sqlalchemy

    一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...

  10. python练习六十二:文件处理,往文件中所有添加指定的前缀

    往文件中所有添加指定的前缀 方法一:open方法 f_r = open('text.txt') f_w = open('text_new.txt','w+') i = 0 while True: i ...

随机推荐

  1. 【深度思考】聊聊CGLIB动态代理原理

    1. 简介 CGLIB的全称是:Code Generation Library. CGLIB是一个强大的.高性能.高质量的代码生成类库,它可以在运行期扩展Java类与实现Java接口, 底层使用的是字 ...

  2. Kubernetes(K8S) kubesphere 安装

    安装KubeSphere最好的方法就是参考官方文档,而且官方文档是中文的. 官网地址:https://kubesphere.com.cn/ https://github.com/kubesphere/ ...

  3. 2022CSP游记

    目录 CSP-J2022 7:45 8:15 8:27 8:38 9:12 9:23 10:34 11:57 中午 CSP-S2022 2:27 4:15 6:12 估分 普及 提高 自查 出分 废物 ...

  4. count(列名)、count(1)和 count(*)有什么区别?

    在MySQL中,这几个都是统计操作,很多人在使用的时候,都使用的是count(1),这有没有问题?使用正确?达到了统计效果? 我们从效果和效率两方面来分析下 执行效果 count(*) 包括了所有的列 ...

  5. 2021-07-21:一张扑克有3个属性,每种属性有3种值(A、B、C),比如“AAA“,第一个属性值A,第二个属性值A,第三个属性值A,比如“BCA“,第一个属性值B,第二个属性值C,第三个属性值A

    2021-07-21:一张扑克有3个属性,每种属性有3种值(A.B.C),比如"AAA",第一个属性值A,第二个属性值A,第三个属性值A,比如"BCA",第一个 ...

  6. Django4全栈进阶之路21 项目实战(在线报修):创建App应用和Model模型

    创建应用App python manage.py startapp RepairApp 创建模型 在models.py文件中定义一个Repair模型来表示报修单,其中包含以下字段: repair_id ...

  7. 解决:Invalid HTTP_HOST header: '192.168.56.1:8001'. You may need to add '192.168.56.1' to ALLOWED_HOSTS.

    在setting.py下的ALLOWED_HOSTS=['*']添加'*'就可以解决显示不出来的问题.

  8. ToolStrip1

    Private Sub ToolStrip1_ItemClicked(sender As Object, e As ToolStripItemClickedEventArgs) Handles Too ...

  9. odoo总结---类继承和视图继承

    类继承 自从有了类,就有继承,继承是类最大的特性,ODOO开发有不例外,先ODOO集采总结如下: 1)类继承:扩展类中没有_name属性,因为它继承了父类的_name.对现有模型的扩展, 添加新功能, ...

  10. Java设计模式中的几种常用设计模式总结

    一.设计模式概念 1.定义 ​ Java包含23种设计模式,是一套对代码设计经验的总结,被人们反复利用,多人熟知的代码设计方式. 2.目的 ​ 为了提高代码的可读性,可扩展性以及代码的复用性,为了解决 ...