1.读取文件
lstrip()删除左边空白符。rstrip()删除右边空白符。strip()删除两端空白符。
# #window 读取文件可以用\,但是在字符串中\是被当作转义字符来使用,经过转义之后可能就找不到路径的资源了,
# 例如\t会转义为tab键,,,,这里有两种方法:
# 一:更换为绝对路径的写法
# func1("C:\\Users\\renyc")
# 二:显式声明字符串不用转义(加r)
# func1(r"C:\Users\renyc")这里使用r来告诉
file_path='C:\\Users\\Blessing Lee\\Desktop\\pi.txt' #绝对路径
#file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt' #加r声明
with open(file_path) as file_object: #open打开文件并返回一个表示文件的pi.txt文件对象,
message=file_object.read() #Python将这个对象存储在后面的变量file_object中
print(message) #有了文件的对象后,read读取它并把它作为长字符串存储在变量message中
----------------------------------------------------------------
#如果文件是在该代码同一目录下,则可使用:
with open('pi.txt') as file_object:
----------------------------------------------------------------
#相比于原始文件,read()输出会在末尾多一个空行,因为read()到达文件末尾时返回一个空字符串,而将这
#个字符串显示出来就是一个空行。
#删除空行可在print()中使用rstrip()方法:
print(message.rstrip()) #使用rstrip()删除多余空行
2.访问文件中每一行的内容
file_path='C:\\Users\\Blessing Lee\\Desktop\\pi.txt' #绝对路径
#file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt' #加r声明
with open(file_path) as file_object:
for line in file_object: #通过文件对象执行循环遍历文件中的每一行
print(line)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926
#发现输出会多很多空行,因为在这个文件中每行末尾都有一个换行符,而print语句也会加上一个换行符,
535 #因此末尾两个换行符:一个人来自文件,一个来自print
----------------------------------------------------
#可使用strip()来消除换行,例如:print(line.strip())
3.创建一个包含文件各行内容的列表
使用with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外访问这些文件的内容时,可在with代码块内将文件各行存储在一个列表中。例如:
file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt' #加r声明
with open(file_path) as file_object: #一模一样,前面都不需要变
lines=file_object.readlines() #使用Readlines()从文件中读取每一行并将其存储在一个列表中,该列表存储到变量lines中
for line in lines: #在with代码块外循环遍历lines,访问文件中的内容
print(line.strip())
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926
535
4.使用文件中的内容
file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt' #加r声明
with open(file_path) as file_object: #这里从来就没变过
lines=file_object.readlines() #逐行读取文件内容并将其以列表方式存储在lines中
pi_string='' #设置pi为一个空字符串先
for line in lines:
pi_string+=line.strip() #pi=pi加遍历后去空格的文件内容
print(pi_string)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pi=3.1415926535 #去掉换行后生成这样咯
#如果你的文件够大,或者你只想显示部分可以使用切片,例如print(pi_string[:5])显示前5位结果为:pi=3.141
#此时生成的pi依旧是字符串,因为Python读取所有文本都解读为字符串,如果你要将其用作数值,
#可使用int()转换为整数,或者使用float()转换为浮点数
5.replace()方法,将字符串中特定的单词替换为另一个单词
message="I really like dogs."
print(message.replace('dog','cat'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I really like cats. #简直黑科技啊,不仅能将dogs变成cats,就连没有加s的都能给你变了
#它检测到你想要变的字符就和你输入字符一样的全给替换
print(message.replace('do','cat'))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
I really like catg. #这里就是将cat与do替换了而已
6.写入文件
使用'w'模式时千万小心,如果你写入的文件不存在,open()函数会自动给你创建它,但是要是有这个文件的话,Python将在返回文件对象前清空该文件。尼玛,里面原来的内容全给你删了
python只能将字符串写入文本文件。要将数值数据存储到文本中必须先使用函数str()将其转换为字符串格式
file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt' #加r声明
with open(file_path,'w') as file_object: #open()中两个实参,file_path文件路肩的对象,‘w’告诉python以写入模式打开这个文件
file_object.write("i love dog!"
#结果:我的pi.txt文件中只剩下一句 i love dog! ,之前的文件内容全没了
---------------------------------------------------------------------
file_object.write("i love cat!") #写入多行如果不换行的话内容挤在一起的
#结果:i love dog!i love cat! #可使用\n,例如:file_object.write("i love dog!\n")
7.附加到文件
打开文件时可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)以及能够读取和写入的模式(‘r+’),如果省略这个参数的话python将以默认的只读模式打开文件。
如果想给文件添加内容而不是想‘w’模式那样覆盖原有的内容,可采用附加模式。它会将你写的内容添加到文件内容的末尾。
如果文件不存在,它也是会给你创建一个文件的。
file_path=r'C:\Users\Blessing Lee\Desktop\pi.txt' #加r声明
with open(file_path,'a') as file_object:
file_object.write("\nthis is my add contents!!!!")
file_object.write("\n中午了外卖还不到,快要饿死了!!")
#文件中内容>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
i love dog!i love cat!
this is my add contents!!!!
中午了外卖还不到,快要饿死了!!
8.异常处理:使用try--except代码块处理异常
使用try--except代码块让Python在执行指定的操作,同时告诉Python遇到异常时该怎么做。使用try--except代码块时即使出现异常程序也将继续运行,显示你编写的友好错误提示或者执行你编写的发生错误时的代码。
#处理ZeroDivisionError异常(分母不能为0)
try:
print(5/0)
except ZeroDivisionError: #当出现ZeroDivisionError就执行except下的语句
print("分母不能为0") #这里告诉Python当程序遇到错误时输出提示分母不能为0
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
分母不能为0
-----------------------------------------------
#处理FileNotFoundError异常(文件找不到)
filename='test.txt'
try:
with open(filename) as flie_job:
message=file_job.read()
except FileNotFoundError:
mes="文件"+filename+"找不到!"
print(mes)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
文件test.txt找不到!
9.else代码块
通常将可能发生错误的代码放到try--except中,而其它依赖于try代码块成功执行的代码都应该放入else代码块中,例如:
print("输入两个数字我将对它们进行除法运算!\n")
while True:
fist_num=input("请输入除数:")
second_num=input("请输入被除数:")
try:
anser=int(fist_num)/int(second_num) #可能出现错误的代码放入try代码块中
except ZeroDivisionError: #except代码块对遇到错误时执行应对措施
print("分母不能为0")
else: #如果以上代码都没问题那就正常执行else块
print(str(fist_num)+"/"+str(second_num)+"="+str(anser))
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
输入两个数字我将对它们进行除法运算!
请输入除数:5
请输入被除数:2
5/2=2.5 #当输入的都没问题时,执行else代码块
请输入除数:5
请输入被除数:0
分母不能为0 #当输入分母为0时,程序遇到错误,执行except下的代码块
请输入除数:
10.失败时不报错,可以在except代码块下执行pass,使程序在遇到该错误时什么都不做,继续执行其他不会报错的代码
#就直接在except代码下写pass,例如文件找不到错误:
try:
.......
except FileNotFoundError:
pass
else:
.......
11.split()方法,它根据一个字符串创建一个单词列表。然而,它只能分割单词,并不能将一中文分成单个的字存储,例如:
#split()方法的使用:
mes_e="i want rich!" #英文
print(mes_e.split())
mes_c="我想有钱!你连中文都不能分割。你有用吗?" #中文
print(mes_c.split())
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
['i', 'want', 'rich!'] #英文的列表里就分成了三个单词
['我想有钱!你连中文都不能分割。你有用吗?'] #中文的还是将一句话分成一个列表元素
12.json存储数据,使用json.dump()和json.load()
#1.使用json.dump()来存储数字列表:
import json #导入json模块
numbers=[1,2,3,4,5] #创建一个数字列表
filename='numbers.json'
with open(filename,'w')as fil_job: #open写模式
json.dump(numbers,fil_job) #使用json.dump()将numbers写入fil_job指向的文件中
#文件中内容>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1,2,3,4,5]
-------------------------------------------------------------------------------------------
#使用json.load()将这个列表读取到内存:
import json
filename='numbers.json'
with open(filename) as fil_job:
numbers=json.load(fil_job)
print(numbers)
#>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[1,2,3,4,5]
案例:如果一切存储了用户名,就加载它,否则提示用户输入用户名
import json
#如果之前存储过用户,就加载它,否则提示用户输入并存储
filename='username.json'
try:
with open(filename) as fil_job:
username=json.load(fil_job)
except FileNotFoundError:
username=input("what is your name?")
with open(filename,'w') as fil_job:
json.dump(username,fil_job)
print("i will remember you"+username)
else:
print("welcome back,"+username)
13.重构
将代码划分一系列完成具体工作的函数。重构让代码更清晰、更易于理解、更容易扩展。