一、读取文件
1.打开文件
open(文件名,打开文件的模式,encoding="UTF-8") 打开一个文件
注意点:
被打开的文件和当前文件在同一路径下,可以写文件名
被打开的文件和当前文件不在同一路径下,可以写绝对路径,
但是在写绝对路径时,记得 open(r"C:\Users\Administrator\PycharmProjects\untitled1\aaa.txt", "r", encoding="UTF-8")
转义r,
# 一般情况,如果开头打开了,那么结尾就要关闭 open与close是一对
f = open("aaa.txt", "r") # content = f.read() # print(content) # 报错,是编码的原因 'gbk' codec can't decode byte 0x9f in position 12: illegal multibyte sequence # 1.打开 f1 = open("aaa.txt", "r", encoding="UTF-8") # 2.读取所有的内容 content_1 = f1.read() print(content_1) # hello python 最好的语言是python # 3.关闭文件 f.close() # 前面有open,那么结尾就得加上close
2.读取文件
read():读取文件中所有的内容
readline():每次读取一行内容
readline()按行把所有的内容,读取到一个列表中,每一行都是列表中的一个元素
# 1.打开 f = open(r"C:\Users\Administrator\PycharmProjects\example\day_01\abc.txt", "r", encoding="UTF-8") # 2.读取内容 # 第一种方式:read()读取所有的内容 content = f.read() print(content) # 第二种方式:readline()每次读取一行内容 content1 = f.readline() # print(content1) # 默认读取第一行 print('1', content1) # 打印文件中第一行内容 print('2', f.readline()) # 打印文件中第二行内容 print('3', f.readline()) # 打印文件中第三行内容 # # # 假设我要读取3行,怎么读取?读取指定行数 for i in range(3): print(f.readline()) # 第三种方式:readlines()按行把所有的内容,读取到一个列表中,每一行都是列表中的一个元素 content3 = f.readlines() print(content3) # 如果读取第七行的内容 c7 = f.readlines()[6] print(c7) # 3.关闭文件 f.close()
二、写入文件
r:只读模式(read),如果文件不存在则会报错
w:写入模式(write),覆盖写入(会清楚原来的内容)如果文件不存在则会自动创建
a:写入模式(append),追加写入(在原有文件的尾部,写入新的内容),如果文件不存在则会自动创建
***扩展另外三种:
# 通常用来读取非文本模式(图片、表格、)
rb:只读模式(read),以二进制模式打开的,如果文件不存在则会报错
wb:写入模式(write),以二进制模式打开的,覆盖写入(会清楚原来的内容)如果文件不存在则会自动创建
ab:写入模式(append),以二进制模式打开的,追加写入(在原有文件的尾部,写入新的内容),如果文件不存在则会自动创建
# 打开 f = open("aaa.txt", "w", encoding="utf-8") # 写入内容 f.write("123456789") # 关闭 f.close() print("----------------------------------------------------") # 打开 f = open("aaa.txt", "a", encoding="utf-8") # 写入内容 f.write("wuefbevjnklsdjcubjk") # 关闭 f.close() # 图片的复制 f1 = open("Devops.png", "rb") # 先读取 f2 = open("copy_image.png", "wb") con = f1.read() f2.write(con) # 再写入 f1.close() f2.close()
三、with操作文件
通过上下文管理器with去打开文件,操作完之后会自动关闭文件
with open("Devops.png", "rb") as f: con = f.read() with open("002.png", "wb") as f2: f2.write(con)
我们在写python代码时,一般都是这种with去操作文件,对文件进行处理,因为方便好用,用的多
四、模块和包
模块:在python中,只要是以.py结尾的文件都可以称之为模块
包:包含了一个一个_init_.py文件的文件夹就可以称之为python的一个包
模块导入:
import 模块名
from 包名(如果存在多级嵌套的情况) import 模块名
(如果存在多级嵌套的情况,需要一级一级往下找)
导入模块中的某个函数或者变量:
from 模块名 import 变量名/函数
from 包名.模块名 import 变量名/函数
from xxx import xxx as 别名 (这个也常用!!!)
# 模块导入 # 方式一:导入整个模块 import test01 # 方式二、导入模块中的部分内容 from test01 import a print(a) # 这个波浪线并不是代码写错了,pycharm识别不出我们自定义的这个模块 from test01 import work work() # 扩展 # 通过as给导入进来的方法或者变量重新起个名字(别名) # work也可以被叫做w1,如果两个方法或者函数名有重名的时候可以使用as,不然导入的数据会被覆盖掉 from test01 import work as w1 w1() # 同时导入模块中的多个方法和函数和变量 from test01 import a,work,num print(a) print(num) # 导入模块中所有的内容(不推荐使用) from test01 import * print(a) print(num) work() # 包导入 # from 包名 import 模块名 # from 包名.模块名 import 模块中的变量或方法 # from pack01 import module1 module1.m_func1() print(module1.aa) print(module1.bb) from pack01.module1 import aa,bb print(aa) print(bb)
其实,说了这么多,几乎就是这两条:
模块导入
方式一:import 模块名
方式二:from 模块名 import 模块中的变量或者函数
包导入:
方式一:from 包名 import 模块名
方式二:from 包名.模块名 import 模块中的变量或者函数
或者再在后面as别名
关于python中包导入的搜索路径
import sys
sys.path