以下内容仅做自己学习使用,知识点内容来自柠檬班,转载请标记来源
@Author:木又
@File:demo1_python打开文件.py
@Time:2021/3/09 19:10
@Name:Ta Quan Ge
在python中读取文件
open(文件名,打开文件的模式,encoding = “utf-8”)
注意点:
被打开的文件和当前文件在同一路径下,可以写文件名
被打开的文件和当前文件不在同一路径下,可以写文件完整的路径
#**1.打开文件**
# 同一路径下读取
f = open("Test.txt", "r", encoding="utf8")
# 不同路径下读取
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8")
#**2.读取文件内容**
content = f.read()
print(content)
#**3.关闭文件**
f.close()
@Author:木又
@File:demo2_python中读取文件的几种方法.py
@Time:2021/03/09 19:23
1.打开文件
f = open("case.txt", "r", encoding="utf8") # 同一路径下读取
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8") # 不同路径下读取
2.读取文件内容
2.1第一种方式 read:读取所有的内容
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8") # 不同路径下读取
content = f.read()
print(content)
2.2第二种方式 readline:每次读取1行内容
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8") # 不同路径下读取
# 默认读取第1行的内容
content = f.readline()
# 传参数则会默认读取第一行中的多少个字符
# content = f.readline(9)
print(content)
# 与for循环配合使用,遍历读取每一行的数据
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8") # 不同路径下读取
for i in range(3):
print(f.readline())
2.3第三种方式 readlines:按行把所有内容读取到列表中,每一行就是列表中的一个元素
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8") # 不同路径下读取
content = f.readlines()
print(content)
使用2.3的读取方法就可以指定读取某一行的内容
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "r", encoding="utf8") # 不同路径下读取
content = f.readlines()[2]
print(content)
3.关闭文件
f.close()
@Author:木又
@File:demo3_文件写入.py
@Time:2021/3/9 19:44
@Name:Ta Quan Ge
**打开文件的模式
r: 只读模式(read),如果文件不存在,则会报错,控制台提示找不到文件
w:写入模式(write),覆盖式写入,如果文件不存在,则会自动创建
a: 写入模式(append),追加写入(在原有内容的尾部,写入新的内容),如果文件不存在,
则会自动创建
通常用来读写非文本格式的文件
rb: 只读模式(read),以二进制模式打开,如果文件不存在,则会报错,控制台提示找不到文件
wb:写入模式(write),以二进制模式打开,覆盖式写入,如果文件不存在,则会自动创建
ab: 写入模式(append),以二进制模式打开,追加写入(在原有内容的尾部,写入新的内容),如果文件不存在,
则会自动创建
‘’’
# 打开
f = open(r"D:\project\learn_31python\py_08day\case05.txt", "w", encoding="utf8")
# 写入内容
f.write("测试")
# 关闭文件
f.close()
# 文件不存在,则会自动创建
# # 打开
f = open(r"D:\project\learn_31python\py_08day\case09.txt","w",encoding="utf8")
# 写入内容
f.write("测试")
# 关闭文件
f.close()
# a: 写入模式(append),追加写入(在原有内容的尾部,写入新的内容),如果文件不存在,
# 则会自动创建
# 打开
f = open(r"D:\project\learn_31python\py_08day\case09.txt","a",encoding="utf8")
# 写入内容
f.write("_python")
# 关闭文件
f.close()
复制图片
# # 第一步:打开文件
f1 = open("Taquange.jpg","rb")
f2 = open("Taquange_copy.jpg","wb")
# 第二步:读取内容,写入新文件
content = f1.read()
f2.write(content)
# 第三步:关闭文件
f1.close()
f2.close()
# 复制文件
# 第一步:打开文件
f1 = open("test.xlsx", "rb")
f2 = open("test_copy.xlsx", "wb")
# 第二步:读取内容,写入新文件
content = f1.read()
f2.write(content)
# 第三步:关闭文件
f1.close()
f2.close()
@Author:木又
@File:demo4_通过with操作文件.py
@Time:2021/3/9 20:26
@Name:Ta Quan Ge
with:通过with去打开文件,操作完了之后会自动关闭文件
# # 复制图片
# # 第一步:打开文件
# f1 = open("Taquange.jpg","rb")
# f2 = open("Taquange_copy.jpg","wb")
# # 第二步:读取内容,写入新文件
# content = f1.read()
# f2.write(content)
# # 第三步:关闭文件
# f1.close()
# f2.close()
# 以上代码可简化为:
with open("Taquange.jpg","rb") as f1:
content = f1.read()
with open("Taquange01.jpg","wb") as f2:
f2.write(content)
# print(content)
@Author:木又
@File:demo5_模块和包.py
@Time:2020/7/21 20:36
一、模块和包
模块:在pyhton中只要是.py结尾的文件都可以称之为模块
包:包含一个__init__.py文件夹就可以称之为一个pyhton的包
二、模块和包导入:
1.模块导入:
import 模块名
from 包名(如果存在多级嵌套的情况) import 模块名
(如果存在多级嵌套的情况,需要一级一级往下走)
2.导入模块中的某个函数或者变量
from 包名.模块名 import 变量/函数/类
"""
__init__.py有什么作用 #是python包的标识
关于if __name__=='__main__':
__name__:他是python中的一个魔法变量(值不是固定的)
当文件作为程序入口文件(启动文件时),它的值为__main__
该模块作为被其他模块导入的时候,它的值为模块名
"""
def fun(n):
for i in range(1, n + 1):
for j in range(i):
print("* ",end="")
print()
# 下面这个文件只有在直接运行该文件的时候才会成立(该文件作为启动文件)
if __name__ == '__main__': # 如果不加此条件,被导入此模块的模块就会直接打印出来以下内容
print("666")
print("666")
print("666")
在进行包导入时,可以将之前的包名更改,但是在调用时要用更改的名
from xxx import xxx as 别名
关于python中包导入的搜索路径
‘’’
-----------------------------导入模块---------------------------
方式一:
如果要导入的模块和当前模块在同一个目录下,可以直接 ,import 模块名
(由于pycharm识别不到,会有红色波浪线,实际上是可以使用的)
import pack01_demo1
pack01_demo1.fun(4)
方式二:
相对于项目路径,一级一级往下导入,from 包名 import 模块名
from py_09day.pack01 import pack01_demo1
pack01_demo1.fun(3)
-----------------导入模块中的函数或者变量---------------
导入模块中的某个函数或者变量
from 包名.模块名 import 变量/函数/类
from py_09day.pack01.pack01_demo1 import fun
fun(4)
@Author:木又
@File:work_09day.py
@Time:2020/7/21 23:17
@Name:Ta Quan Ge
第一题:当前有一个txt文件,内容如下:
数据AAAA
数据BBBB
数据CCCC
数据DDDD
要求:请将数据提取处理,转化为一下格式
{‘data0’:‘数据AAAA’,‘data1’:‘数据BBBB’,‘data2’:‘数据CCCC’,‘data3’:‘数据DDDD’}
# def read_fun():
# with open(r"D:\project\learn_31python\py_09day\work_data.txt", "r", encoding='utf8') as f:
# content = f.readlines()
# dic = {}
# for index, data in enumerate(content):
# key = f"data{index}"
# value = data.replace("\n", "")
# dic[key] = value
# return dic
#
#
# res = read_fun()
# print(res)
# 第二题:当前有一个case.txt文件,里面中存储了很多用例数据: 如下,每一行数据就是一条用例数据,
# 文件中数据
# url:www.baidu.com,mobilephone:13760246701,pwd:123456
# url:www.baidu.com,mobilephone:15678934551,pwd:234555
# url:www.baidu.com,mobilephone:15678934551,pwd:234555
# url:www.baidu.com,mobilephone:15678934551,pwd:234555
# url:www.baidu.com,mobilephone:15678934551,pwd:234555
#
# # 要求一: 请把这些数据读取出来,到并且存到list中,格式如下
# [
# {'url': 'www.baidu.com', 'mobilephone': '13760246701', 'pwd': '123456'},
# {'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
# {'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
# {'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
# {'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'}
# ]
def read_case():
with open(r"D:\project\learn_31python\py_09day\work_case.txt", "r", encoding='utf8') as f:
content = f.readlines()
li = []
for i in content:
res = i.split(",")
dic = {}
for j in res:
res1 = j.split(':')
key = res1[0]
value = res1[1].replace('\n', '')
dic[key] = value
li.append(dic)
return li
data = read_case()
print(data)
# # 要求二:将上述数据再次进行转换,转换为下面这种字典格式格式
#
# {
# 'data1':{'url': 'www.baidu.com', 'mobilephone': '13760246701', 'pwd': '123456'},
# 'data2':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
# 'data3':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
# 'data4':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'},
# 'data5':{'url': 'www.baidu.com', 'mobilephone': '15678934551', 'pwd': '234555'}
# }
#
# # 提示:需要使用字符串的分割方法
#
# # 注意点:数据中如果有换行符'\n',要想办法去掉。
# from py_09day.workread_data import read_case
#
#
# def fun_dic():
# dic = {}
# for index, data in enumerate(read_case()):
# key1 = f"data{index + 1}"
# value1 = data
# dic[key1] = value1
# return dic
#
#
# work_dic = fun_dic()
# print(work_dic)
# 第三题:之前上课讲了一个注册功能的案例,再之前案例的功能上进行升级,
# 要求:把所有用户数据放到文件中进行保存,数据存储的格式不限,原来的案例代码如下
def register():
# 读取文件中已注册的数据
with open(r"D:\project\learn_31python\py_09day\workuser_data", "r", encoding="utf8") as f:
#将读取的内容,使用eval识别字符串的列表(因为f.read()返回的类型是“str”)
users = eval(f.read())
id = input("请输入账号:")
pwd = input("请输入密码:")
pwd2 = input("请再次确认密码:")
# 遍历所有的账号
for u in users:
# 判断账号是否已经被注册,输入的名称与遍历到的值做比较
if id == u["uid"]:
print("该账号已经被注册!")
break
else:
# 如果账号没有注册,那么for循环中的break不会执行。则会执行for对应的else语句
print("该账号可以注册,继续判断密码!")
# 判断两次密码是否一致
if pwd == pwd2:
# 输入的账号密码已字典的形式加入道users中
users.append({"uid": id, "pwd": pwd})
print("注册成功!")
else:
print("两次输入的密码不一致")
# # 运行结束后,将所有的用户数据写入文件
with open(r"D:\project\learn_31python\py_09day\workuser_data", "w", encoding="utf8") as f:
#将列表转换为字符串,写入文件
f.write(str(users))
register()
# with open(r"D:\project\learn_31python\py_09day\workuser_data", "r", encoding="utf8") as f:
# datas = eval(f.read())
# print(datas)
# 提示:
# 每次运行程序,先去文件中读取所有注册过的用户数据,
# 程序运行完之后,将所有的用户数据再次写入到文件
# 可以把保存账号的列表转为字符串直接写入文件,读出来的时候,再把字符串转换为列表