14.Python代码写入/读取文件语法和操作记事本txt和文件复制案例
提示:帮帮志会陆续更新非常多的IT技术知识,希望分享的内容对您有用。本章分享的是Python基础语法。前后每一小节的内容是存在的有:学习and理解的关联性,希望对您有用~
python语法-python基础 第十四节 :Python代码写入/读取文件语法和操作记事本txt和文件复制案例
文章目录
前言
Python文件操作:
通过open方法来获得操作的文件,可以是写入数据,也可以是读取数据。
open(“”)方法常用的参数有:
open(“文件路径”,”模式”,其他参数名=值)
文件路径 :可以是相对路径(从当前这个代码Python文件开始),也可以是绝对路径(根目录下的路径具体哪一个文件)
模式:w 写入, r 读取 ,a 追加
其他参数名例如 :
newline=“” 新行的数据内容
encoding=‘utf-8’ 中文格式
注意:如果您是第一次尝试,建议使用相对路径,使用在您编写Python代码文件的同目录路径下txt记事本去操作。因为有些电脑权限严格,您用C盘或者D盘的文件,Python没有权限去操作电脑的盘符文件
(代码是对的,就是运行没反应.)
所以:第一次尝试,建议放到对应的代码位置
一、写入数据
1.1 write方法写入
#开启一个hello.txt的文件数据通道,即就是操作这个hello.txt文件
#模式为w(写入),中文编码格式是utf-8
#给这个通道取一个别名是:f 别名可以是其他名字,这个我取file的意思
with open("hello.txt",'w',encoding='utf-8') as f:
f.write("你好,帮帮志")
f.write("我这里是很长的一句话")
f.write("这个案例目前用了三行代码") #别名.write(内容) 将内容写到文件里面
"hello.txt"就是当前 代码文件的同层级位置
“…/…/hello.txt” 表示某某层级下的hello.txt记事本文件
也可以是:“D:/hello/hello.txt” 操作D盘里面hello文件夹里面的hello记事本
提示:使用D盘的路径,可以自己提前先把文件夹创建好,代码运行就没毛病.Python创建文件夹,需要使用os库的代码,它能判断对应位置是否存在文件夹,也能帮我们创建新的文件夹.它还有很多功能.如:把文件路径存储到os变量里面,作为参数交给各种其他库,保证用的同一个东西,大家就不会找不到/生成多个,而有bug。操作图片\视频\大文本,经常用到,后续会补充一个os详细使用的文章
运行前结构:如果对应的位置没有创建hello.txt,Python程序会帮助我们创建一个,但是目前它不能自动创建文件夹/也不确定它是否有D盘C盘的权限
所以建议:第一次尝试,同层级位置。
运行代码,自动新生成了一个:hello.txt
双击打开,hello.txt 看:
故意演示用了三行代码,它是没有换行的
换行:使用 \n
\n可以放任意位置,有\n的才表示换行,而不是代码用了几行就换几行。
所以一般会放到内容每一句的最后。
with open("hello.txt",'w',encoding='utf-8') as f:
# 通过这个别名可以 实现操作 写入
f.write("你好,\n帮帮志\n")
f.write("我这里是很长的一句话")
f.write("这个案\n例目前虽然用了三行代码")
运行:有\n的才换行,故意没有统一放到结尾,可以观察即可看出具体用法
w是写入,最开始演示的很长那一句:没有换行的那个内容,在hello.txt里面已经被新的内容覆盖掉了。
将模式修改为:a 追加。就不会覆盖原有的,会写到原有内容的后面:
with open("hello.txt",'a',encoding='utf-8') as f:
# 通过这个别名可以 实现操作 写入
f.write("我是新的内容\n")
f.write("运行之后/您运行几次,我就在记事本里面多生成几次")
f.write("我会排在上一行后面,因为上一行没有换行符\n")
f.write("注意,模式那里修改为:a,及f.write方法,不是read,才是追加内容\n")
1.2 writeLines方法写入,可以同时写入很多行
既然都是writeLines(),就不用调用很多次方法
一般用list列表存储数据,通过list列表直接传递数据就好:
writeLines(list列表数据)
with open("hello.txt",'a',encoding='utf-8') as f:
#随便放点数据,list列表真实情况可以是其他方法的返回值(直接就有很多个对应的数据)
list=["aaa\n","bbz\n","ccc\n"]
f.writelines(list)
1.3 另一种写法
刚刚使用的是:
with open(“hello.txt”,‘w’,encoding=‘utf-8’) as f:
语义为:在当前位置开启一个名字为hello.txt的文件数据通道,模式是w,中文是utf-8,取一个名字是f
另一种写法,直接用变量来接收:
f = open(“hello.txt”,‘w’,encoding=‘utf-8’)
语义为:在当前位置开启一个名字为hello.txt的文件数据通道,模式是w,中文是utf-8,交给变量f
案例:
#因为运行这个文件,它会去操作对应的文件位置操作
#写这句,是我怕有些萌新误认为 Python代码没反应呢,控制台输出了这句,就表示代码正常运行了
#去找您操作的文件
print("hi~帮帮志")
#交给变量f
f = open("hello.txt",'w',encoding='utf-8')
#随便放点数据,list列表真实情况可以是其他方法的返回值,不用人工填
list=["aaa\n","bbz\n","ccc\n"]
f.writelines(list)
#关闭这个通道
f.close()
两种写法的区别:
1.with open(“hello.txt”,‘w’,encoding=‘utf-8’) as f:
里面的代码是有TAB的,通过Python语法很清晰的表示:这些文件操作的代码是属于这个with open代码块的。所以:f的生命周期,就在这个有TAB的代码块里面,出了这个代码块,就没法使用了(其他地方使用,提示报错:没有声明f)
f = open(“hello.txt”,‘w’,encoding=‘utf-8’)
通过Python语法很清晰的表示:全局变量,本Python文件的所有地方都可以用这个f变量
通过语法,很直观的看出区别
语法就很清晰的表示了,它们的实际区别:
一个是有范围的,一个是全局的。
根据实际情况来使用,with open会安全一点,毕竟文件操作使用f,就在那个代码快里面完成了,其他地方想用也用不了。
如果确实谁谁都需要使用,就写成全局变量。 但是谁谁都需要使用的情况:
可以把文件路径写成变量,作为参数传递,这个路径变量的值,它还可以通过其他方法动态修改,操作不同的路径 :xxx01.txt | xxx02.txt | xxx03.txt
strPath = “hello.txt” #存一个共同的位置 变量
with open(StrPath ,'w',encoding='utf-8') as f01:
#我在我的代码块里面 我操作我的
f01.xxx #文件操作就在那个代码快里面完成
with open(StrPath ,'w',encoding='utf-8') as f02:
#我自己操作我的
f02.xxx #出了我这个代码快 f02就失效(未定义)
二、读取数据
根据上一个案例,仅仅把w修改为r就可以了。方法变成read()方法
with open("hello.txt",'r',encoding='utf-8') as f:
#使用data变量来接收read方法读取的值
data = f.read()
#查看一下data的数据类型
print(type(data)) #str 字符串
#输出到控制台
#输出到print(type(data))控制台
print(data)
运行结果:
with open("hello.txt",'r',encoding='utf-8') as f:
data = f.readlines()
print(type(data))#list列表
print(data)
运行结果:
不同的方法读取,取出结果的数据类型不一样。
一个是str 一个是list
文件复制案例
# 读取文件内容
file_read = open("hellos.txt",'r') #当前位置
# 写入文件内容
file_write = open("copy.txt",'w') #如果没有,它会帮我们创建自动这两个txt
# 读取要复制的数据内容
text = file_read.read()
# 写入到复制的文件中去
file_write.write(text)
# 释放资源
file_write.close()
file_read.close()