首先在当前python文件所在目录下创建一个文件名为test
的测试文件
里面的内容是
1.我喜欢唱、跳、rap、篮球
2.我喜欢唱、跳、rap、篮球
3.我喜欢唱、跳、rap、篮球
该test文件与main.py的python在同一个目录下
`
然后执行下列代码:
f = open("test", mode="r", encoding="utf-8")
content = f.read()
print(content)
打开一个文件要用到open("文件名",mode="r"
,encoding=“使用的编码方式”)
首先文件名可以选择相对路径或绝对路径:
相对路径是相对于当前文件而言,某文件的所在位置
绝对路径是从某盘开始的详细文件路径(Windows),或者从根目录开始(Linux)。
其次,mode表示对文件所采取的权限,r表示读取,即read的缩写
最后,encoding表示使用utf-8的字符集编码。
执行代码结果如下:
通过readline()
我们可以一行一行的读取文件中的数据内容。但是执行上述代码后,根据结果我们发现,每打印一行内容,都空了一行,然后才输出下一行内容。
这是因为在文件中,每句话的末尾隐藏了一个换行符;然后print()
自身也带有换行符,
因此最后的打印效果就是每段内容中间都间隔一行。
如果不想有换行,可以通过strip()
取消,它的作用是去掉字符串左右两端的空白,包括空格、换行、制表符
这个知识点在前文提到过:python-(4-1)数据类型的应用(int、float、bool、字符串)
此处可以看到,每行内容后面的确有一个换行符\n
直接执行下列代码
如果没有test01
文件,就可以创建一个,在当前目录下,文件名为test01
的文件
如果有test01
文件,就会清空该文件中的内容
f = open("test01.txt", mode="w", encoding="utf-8")
同理,此处的w
就是write的缩写
然后向文件中写入你好,朋友
f.write("你好,朋友")
文件中就会存在该内容。
最后记得关闭文件(只要使用了open()
,不管是读还是写,都记得关闭文件)
f.close()
紧接着上述文件test01
的内容,增加一行内容你真棒
f = open("test01", mode="a", encoding="utf-8")
f.write("你真棒")
f.close()
会在文件内容的末尾继续增加,而不是另起一行
同理,a
就是append的缩写
要求:存在列表list = ["张三", "李四", "王五"]
,将这些人名写入文件test02
中
list = ["张三", "李四", "王五"]
# 创建准备写的文件
f = open("test02", mode="w", encoding="utf-8")
# 遍历列表的所有名字
for name in list:
# 在文件中写入列表的名字
f.write(name)
# 写完后换下一行
f.write("\n")
# 关闭文件
f.close()
with...as...
读取或写入文件使用上述的语法打开文件,会经常忘记关闭文件。
为了省略f.close()
这一关闭文件的步骤,可以用另一种格式打开文件。
with open("test", mode="r", encoding="utf-8") as f:
for line in f:
print(line.strip())
在当前目录下载了一个图片,希望能够读取
with open("sky.webp", mode="rb") as f:
for line in f:
print(line)
其中mode中的b
是bytes字节,表示读取到的是非文本文件
复制一个文件的本质是:先从源文件中读取内容,再将其写到新的路径下
with open("sky.webp", mode="rb") as f1, \
open("venv\sky2.webp",mode="wb") as f2:
for line in f1:
f2.write(line)
注意:第一行代码最后的反斜杠表示,该行内容没有写完,它与下一行的代码在逻辑上是一行内容,只不过在此处为了美观我们将这一行代码分割成了两行。
python的解释器执行代码是一行一行向下执行的,所以我们才会用到上述的反斜杠\
。
需求:本目录下有一个包含人名的文件test03
,要将所有姓周
的人的姓换成赵
文件test03
中的内容如下:
杨过
郭靖
周伯通
周星驰
周杰伦
周树人
刘德华
思路:循环遍历每个人名,将修改后的内容其放在新生成副本文件中,再删除原文件,把副本文件重命名。
代码:
# 导入操作系统相关的模块
import os
import time
# 打开并读取test03,创建并准备写入test03.bak
with open("test03", mode="r", encoding="utf-8") as f1, \
open("test03.bak", mode="w", encoding="utf-8") as f2:
# 遍历test03文件
for line in f1:
# 将读取的文件内容进行处理,中间没有空行
line = line.strip()
# 如果是姓周的
if line.startswith("周"):
# 由于字符串不可改变,所以需要在字符串替换时重新赋值给新变量
line = line.replace("周", "赵")
# 将修改后的内容写入test03.bak
f2.write(line)
# 每写完一行,转行新起一行
f2.write("\n")
# 利用time模块,程序休眠3秒钟(直观的看到test03.bak的创建和重命名)
time.sleep(3)
# 利用os模块,删除原来的test03文件
os.remove("test03")
# 利用time模块,程序休眠3秒钟
time.sleep(3)
# 利用os模块,将test03.bak的文件名修改为test03
os.rename("test03.bak", "test03")