✍前言
欢迎加入纯干货技术交流群Disaster Army:317784952
最终想要让python发挥核武器一般的威力,仅靠它自身是远远不够的,众人拾柴火焰高,今天学习一下在python中读写文件和导入模块。
读写文件
文件打开
python3
的读写格式遵循以下模式:
with open("文件路径", "打开模式", encoding = "操作文件的字符编码") as f: # 使用with块可执行完毕省去close命令
"对文件进行对应的读写"
那么我们可以按照上面的模板进行读写操作,文件路径妇孺皆知不必多言,打开模式分很多种:
参 数功 能r只读模式,如果文件不存在及报错w覆写模式,如果文件不存在及新建文件x创写模式,如果文件不存在及新建文件,如果文件存在及报错a追加模式,如果文件不存在及新建文件,如果文件存在及追加写b二进制文件模式,配合使用“rb”,“wb”,“ab”,该模式不需要指定encodingt文本模式,为默认模式+与“r”,“w”,“x”,“a”配合使用,及“w+”等格式,在原功能基础上增加读写功能
encoding
字符编码通常用到万国码utf-8
或中文编码gbk
,然后将其命名为f
,写入内容:两个黄鹂鸣翠柳,n", "一行白鹭上青天。n","窗含西岭千秋雪,n", "门泊东吴万里船。n
,我们写出如下代码:
with open(".Desktopgogo2.txt", "w", encoding="utf-8") as f:
text = ["两个黄鹂鸣翠柳,n", "一行白鹭上青天。n","窗含西岭千秋雪,n", "门泊东吴万里船。n"]
print(text)
.
表示根目录C:Users你的用户名
,接下来对该文件进行读取:
with open(".Desktopgogo2.txt", "r", encoding="utf-8") as f:
text = f.read()
print(text)
进行逐行读取
全部逐行读取:
with open(".Desktopgogo2.txt", "r", encoding="utf-8") as f:
while True:
text = f.readline()
if not text:
break
else:
print(text, end="") #取消print换行保留原始换行
指定逐行读取:
with open(".Desktopgogo2.txt", "r", encoding="utf-8") as f:
text_1 = f.readline()
print(text_1, end="")
text_2 = f.readline()
print(text_2, end="")
text_3 = f.readline()
print(text_3, end="")
二进制文件读取
with open(".Desktopgogo3.png", "rb") as f:
text = f.read()
print(text)
读写模式
操作模式为“r+”
with open(".Desktophello.txt", "r+", encoding="utf-8") as x:
# f.writelines(text)
x.seek(0,2) # 把光标移动到文本末尾
text = ["n", "who is your dad?"]
x.writelines(text)
print(text)
❌常见程序异常提醒
这个有什么用呢?要知道开发者设计好的道路,用户才不管你的规则,用起来就像这个样子:
所以一定要设置错误提醒,告诉用户需要输入什么,不能输入什么,发生报错是什么原因。常见的程序异常类型如下:
非法语句
SyntaxError: invalid syntax
无法找到文件
FileNotFoundError: [Errno 2] No such file or directory:
值错误
ValueError
索引错误
IndexError
类型错误
TypeError
万能异常
Exception
用try/except
尝试预判错误,用as
显示错误类型:
try:
with open(".Desktopgogo2.txt", "r", encoding="utf-8") as f:
text = f.read()
except FileNotFoundError:
print("小主,找不到您要的文件!")
else:
for s in ["n", ",", "。"]: # 去除文中标点及换行
text = text.replace(s, "")
print("gogo2.txt共有{}个字组成" .format(len(text)))
可能得出如下两种结果:
模块导入
模块分类
- python内置模块
- 第三方模块
- 自定义模块
模块使用
- 导入整个模块——import 模块名成
- 导入模块函数——from模块import类名或函数名
from itertools import product # 从itertools模块中导入product函数
ls = list(product('AB', '123')) # 构造它们的笛卡尔积
print(ls)
- 导入模块所有函数——from模块import*
from random import * # 导入random模块中的所有函数
print(randint(1,100)) # 1-100的随机整数
print(random()) # 0-1的随机小数
小结
这几天睡眠质量明显下降,可能是盯在电脑前面太久了。也许我并不是一个适合玩技术的人,太伤肾太伤腰……两权相害取其轻,比起头发来说,技术根本不值一提(咦?什么鬼?文章总结怎么走出煽情路线?)。要不是这几天一直有人在线作伴,怕是要憋出蛇精病了吧!
python在Win10中可以直接从官方应用市场安装,方便的一批,与此同时我也隐约感觉到路径的问题是不是就是因为这个造成的呢?在文件读写那一块真的折磨了我好久,必须得是".Desktopgogo2.txt"
才可以,“C:Users用户名Desktopgogo2.txt”
就不行呢,什么鬼?如果不指定路径,默认的.py
文件会生成在“C:Users用户名”
下,果然python
最好的运行环境还是Linux
。等着,总有一天会打通任督二脉!