python近期学习

提示:这里可以添加本文要记录的大概内容:

为巩固近期所学,写下该文


提示:以下是本篇文章正文内容,下面案例可供参考

一、File的相关操作

1.文件操作的基本形式

 参数说明

 我们后面用的with open()结构,这个的好处时在文件操作结束后会自动关闭文件。

1 .文件的读入操作

主要的操作函数有

read() 从文件读取指定的字节数,如果未给定或为负则读取所有

readline()一次读取一行

readlines()一次读取所有内容,返回的时一个列表

下面的代码展示了这几个函数的使用方法,也展示了读取全文的方法

with open("C:\\Users\\LENOVO\\Documents\\记事本的使用教程.txt", "r",encoding="utf8") as f:
    print(f.read())#利用read()来进行读取整个内容 只读r是可以缺省的


"""with open("C:\\Users\\LENOVO\\Documents\\记事本的使用教程.txt", "r") as f:
    print(f.read())# 省略默认为gbk"""


with open("C:\\Users\\LENOVO\\Documents\\记事本的使用教程.txt", "r",encoding="utf8") as f:
    text = f.readline() #一次读取一行
    print(text)
    print("--" * 30)


with open("C:\\Users\\LENOVO\\Documents\\记事本的使用教程.txt", "r",encoding="utf8") as f:
    while True:#一行一行遍历全文
        text = f.readline()
        if not text:#这是什么意思?到最后的时候text是空的
            break
        else:
            print(text,end = '')
    print("--" * 30)


with open("C:\\Users\\LENOVO\\Documents\\记事本的使用教程.txt", "r",encoding="utf8") as f:
    text = f.readlines()#读入所有行,以每行为元素,生成一个列表
    print(text)
    print("---" * 30)


with open("C:\\Users\\LENOVO\\Documents\\记事本的使用教程.txt", "r",encoding="utf8") as f:
    for text in f:#和readline类似
        print(text)

2.文章的写入操作

这里展示的操作函数有

write() 将字符串写入一个文件

writelines() 向文件写入一个序列的字符串列表,如果需要换行则需要自己加入每行的换行符号

在这里强调,文件的读写操作时靠移动一个指针来读写文字,指针在文件的末位置,进行读取操作不会读出值,同样,进行写入操作,也不会覆盖掉内容。我们可以通过seek()函数实现。

with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "w", encoding = "utf8") as f:
    f.write("不是你做不到,而是你没有下定决心\n")


with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "w", encoding = "utf8") as f:
    f.write("不是因为你做不到,而是你不想去做\n")
    #会覆盖掉

with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "a", encoding = "utf8") as f:
    f.write("不是因为你做不到,而是你不想去做\n")
    #添加到后面

ls = ["每天跑步好痛苦", "为什么要每天跑步?", "因为我之前太摆了"]
with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "a", encoding = "utf8") as f:
    f.writelines(ls)#将一个元素为字符串的列表整体写入文件!注意是列表

with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "r+", encoding = "utf8") as f:
    # for line in f:
        # print(line) #全部读一边后指针到达结尾
    f.seek(0, 2) #或者可以将指针移到末尾,f.seek(偏移字节数,位置(0:开始,1:当前位置,2:结尾)
    ls = ["每天跑步好痛苦", "为什么要每天跑步?", "因为我之前太摆了"]
    f.writelines(ls)


with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "a+", encoding = "utf8") as f:
    f.write("不是因为你做不到,而是你不想去做\n")

4.介绍两种格式

 1)csv格式:用逗号将数据分开的字符序列,可以用excell打开

with open("C:\\Users\\LENOVO\\Documents\\成绩.csv", "r", encoding = "utf8") as f:
    ls = []
    for line in f:
        ls.append(line.strip("\n").split(",")) #strip() 去除'\n' 以split(",") 分割
    for res in ls:
        print(res)


#这个可谓是太6啦!
ls = [["编号", "数学成绩", "语文成绩"], ["1", "100", "98"], ["2", "89", "99"], ["3", "99", "89"]]
with open("C:\\Users\\LENOVO\\Documents\\成绩.csv", "w", encoding = "gbk") as f:
    for row in ls:
        f.write(",".join(row) + "\n")#聚合字符

2)生成json文件

import json

score = {"P":{"math":96, "physics":98},\
    "b":{"math":88, "physics":100},\
    "c":{"math":98, "physics":99}
}
with open("C:\\Users\\LENOVO\\Documents\\score.json","w",encoding = "utf-8") as f:
    #indent 表示字符串换行+缩进 ensure_ascii = False 显示中文
    json.dump(score, f, indent = 4, ensure_ascii=False)
    

二、异常

在执行程序的过程中,有可能会遇到不符合预期的情况,如果遇到这种情况就终止程序的运行显的很麻烦,为了解决这个问题,我们可以使用python的异常分析

常见的错误有:

除0运算 ——ZeroDivisionError

找不到可读文件——FileNotFoundError

值错误——ValueError

索引错误——IndexError 下标超出范围

类型错误——TypeError

以下介绍了 异常处理 万能异常Exception try-except-else try-except-finally结构

#异常处理
#如果try内代码块顺利执行,except不被触发,否则触发
ls = []
d = {"name":"美女"}
try:
    #y = m
     ls[3]
    # d["age"]
except NameError:
    print("变量名不存在")
except IndexError:
    print("索引超出界限")
except KeyError:
    print("键不在")

#万能异常Exception(所有错误的代名词)
# e捕获异常的值as
ls = []
d = {"name":"美女"}
try:
    #y = m
     ls[3]
    # d["age"]
except Exception as e:
    print(e)

#try-except-else 如果try模块执行,则else模块也执行
try:
    with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "r", encoding = "utf-8") as f:
        text = f.read()
except FileNotFoundError:
    print("没有找到文件")
else:
    for s in ["\n", ","]:
        text = text.replace(s,"")
    print(len(text))

#try_except_else 不论try模块是否执行,finally都会执行
try:
    with open("C:\\Users\\LENOVO\\Documents\\要严格要求自己.txt", "r", encoding = "utf-8") as f:
        text = f.read()
except FileNotFoundError:
    print("没有找到文件")
finally:
    for s in ["\n", ","]:
        text = text.replace(s,"")
    print(len(text))

三:列表的拷贝

这里介绍错误的拷贝方式,浅拷贝,与深拷贝

错误的拷贝方式是直接赋值,它相当于给列表在取了个别名,改变其中一个是会影响另外一个列表

浅拷贝在改变可变数据类型时会影响另外一个

而深拷贝就是两个列表没有任何瓜葛了呀

原理是列表是使用引用数组存放数据,在列表的位置上其实存放的是地址,在浅拷贝的时候如果改变了可变数据类型,因为地址是一样的,所以另外一个也会改变,如果改变的是不可变数据类型,改变了它会生成一个新的类型,故指向的地址发生改变了

#浅拷贝
lst1 = [1, [2, 3, 4], (5, 6, 7, 8), {"a" : 9, "b" : 10}]
lst2 = lst1 #错误的拷贝方式,相当于给lst1再取了个别名,两个名字都是它
print(lst1, lst2)
lst1[1].insert(2,5)
print(lst1)
print(lst2)

#浅拷贝是复制了lst1的地址,赋值给lst3,它们是两个不同的变量
lst3 = lst1.copy()
print(lst1)
print(lst3)
lst1[2] +=(8, 9) #元组不可以修改元素值,可以删除整个元组和对元组进行拼接
print(lst1)
print(lst3)
#进行浅拷贝后,对其中一个列表里面的列表、字典操作,会影响另外一个列表,因为存的是地址,而元组是不可变的,对其中一个列表的元组进行操作会生成一个新列表地址


#深拷贝(拷贝后两个列表没有任何瓜葛了)
import copy

lst2 = copy.deepcopy(lst1)
lst1[-1]["c"] = 10
lst2[1].append(10)

print(lst1)
print(lst2)

 感想

        最近我终于找到了学习python的节奏,勿好高骛远,一天看十几节课,而是要脚踏实地,把它敲下来,理解。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值