第五章-文件与模块与包

文件

读取

常用三种基础访问模式

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))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值