文件
读取
常用三种基础访问模式
r | 只读 | |
w | 写入 | 原有内容会被删除,若文件不存在,创建新文件写内容 |
a | 追加 | 新内容写入已有内容之后,若文件不存在,创建新文件追加内容 |
四种方法
read() | 读取文件,第二次从第一次的末尾读 |
readlines() | 读取文件的全部行,封装到列表中 |
redline() | 一次读一行 |
第四种较为推荐,with open自动读取文件,自动关闭
# mode常用的三种基础访问模式
# r 只读
# w 写入。原有内容会被删除,若文件不存在,创建新文件
# a 追加。新内容写入已有内容之后,若文件不存在,创建新文件
"""
文件的读取
"""
# 打开文件
f = open("D:\pythoncode\\test86.txt", "r", encoding="UTF-8")
print(type(f))
# 读取文件 read()
print(f"读取10字节的结果{f.read(10)}")
print(f"read方法读取全部内容{f.read()}")
#第二次read从上次read结尾开始读
# 读取文件 readlines()
lines = f.readlines() # 读取文件的全部行,封装到列表中
print(f"lines对象的类型:{type(lines)}")
print(f"lines对象的内容是:{lines}")
# 读取为空是因为前面read读到尾,指针也在尾部
# 读取文件 readLine,一次读一行
content1 = f.readline()
print(f"第一行内容{content1}")
content2 = f.readline()
print(f"第二行内容{content2}")
for line in f:
print(f"每一行的数据是{line}")
# 文件的关闭,关闭占用
f.close()
#with open自动操作文件,自动关闭的
with open("D:\pythoncode\test86.txt","r", encoding="UTF-8") as f:
for line in f:
print(f"每一行的数据是{line}")
举例
# 法一
sum = 0
with open("D:\pythoncode\\test87.txt","r",encoding="UTF-8") as f:
for line in f:
line = line.strip() # 去除开头和结尾的空格和换行符
digit = line.split(" ")
for word in digit:
if word == "StreetWolf":
sum += 1
print(sum)
# 法二
f = open("D:\pythoncode\\test87.txt","r",encoding="UTF-8")
content = f.read()
count = content.count("StreetWolf")
print(count)
f.close()
写入
# 1.打开文件
f = open("D:\pythoncode\\test87.txt","w")
# 2.文件写入,至内存中
f.write("hello world")
# 3.内容刷新,至硬盘中
f.flush()
f.close()
注意:直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,这个称之为缓冲区。调用flush的时候,内容会真正写入文件。这样做是为了避免频繁操作硬盘。
close内置了flush功能。
追加写入
f = open("D:\pythoncode\\test87.txt","a",encoding="UTF-8")
f.write("方靓仔最帅")
f.close()
# 文件存在的话会在文件后面继续写
文件综合案例
# 读取文件,将文件写出到testbill90.txt.bak作为备份,丢弃测试数据
# 打开文件得到文件对象,准备读取
fr = open("D:\pythoncode\\testbill90.txt","r",encoding="UTF-8")
# 打开文件得到文件对象,准备写入
fw = open("D:\pythoncode\\testbill900.txt","w",encoding="UTF-8")
# for循环读取文件
for line in fr:
line = line.strip()
# 判断内容,将满足的内容写出
if line.split(",")[4] == "测试":
continue
# 将内容下写出去
fw.write(line)
# 由于前面对内容进行了strip()的操作,所以手动写出换行符
fw.write("\n")
# close两个文件对象
fr.close()
fw.close()
模块
[from 模块名] import [模块,类,变量,函数,*] [as 别名]
按住左ctrl,鼠标左键点击一下模块名(下图import右边的time)即可进入time文件
import time
print("1")
print("2")
time.sleep(3)
print("5")
制作自定义模块类似于Java的类,不再多写
注意:以下代码中的内容是只有程序直接运行时才会运行,如果这段程序是被导入的,则无法进入。一般用作测试这段代码是否正常。
if __main__ == "__main__":
包
法一 import mypackage.module1 import mypackage.module2 mypackage.module1.print1() mypackage.module2.print2() 法二 from mypackage import module1 module1.print1() 法三 from mypackage.module2 import print2 print2()
安装第三方包,使用命令提示符cmd,pip install numpy, numpy可以换为其他包
有一些包可以尝试使用清华大学提供的方法更方便的下载
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
综合案例
import myUtils.strUtil
from myUtils import fileUtil
print(myUtils.strUtil.strReverse("帅最狼野大"))
print(myUtils.strUtil.substr("hiy",0,2))
fileUtil.appendToFile("D:/pythoncode/testbill98.txt","123456")
fileUtil.printFileInfo("D:/pythoncode/testbill98.txt")
要求:
创建一个自定义包,名称myUtils
在包内提供两个模块
strUtil.py(字符串相关工具,内含)
函数:strReverse(s),接受传入字符串,将字符串反转返回
函数:substr(s,x,y),按照下标x和y,对字符串进行切片
fileUtil.py(文件处理相关工具,内含)
函数:printFileInfo(filename),接收传入文件的路径,打印文件的路径,打印文件的全部内容,如文件不存在则捕获异常,输出提示信息,通过finally关闭文件对象
函数:appendToFile(filename,data),接收文件路径以及传入数据,将数据追加写入到文件中
答案如下:
老wolf创建了一个名为myUtils的文件夹,路径为D:\pythoncode\myUtils,其中:
fileUtil.py文件内容如下:
def printFileInfo(filename):
f = None
try:
f = open(filename,"r",encoding="UTF-8")
lines = f.read()
print(lines)
except FileNotFoundError as e:
print(f"文件不存在,异常为{e}")
finally:
if f: # 如果变量是None,表示False,否则为True
f.close()
def appendToFile(filename,data):
f = open(filename,"a",encoding="UTF-8")
f.write(data)
f.write("\n")
f.close()
if __name__ == "__main__":
printFileInfo("D:/pythoncode/testbill900.txt")
appendToFile("D:/pythoncode/testbill900.txt","233")
strUtil.py文件内容如下:
def strReverse(s):
"""
功能是将字符串完成反转
:param s: 将被反转的字符串
:return: 反转后的字符串
"""
return s[::-1]
def substr(s,x,y):
"""
功能是按照给定的下表完成给定字符串的切片
:param s: 即将被切片的字符串
:param x: 切片的开始下标
:param y: 切片的结束下标
:return: 切片完成后的字符串
"""
return s[x:y:1]
if __name__ == "__main__":
str = "olleh"
print(strReverse(str))
print(substr(str,1,3))