09:在python中文件读取、写入操作和模块、包的导入

以下内容仅做自己学习使用,知识点内容来自柠檬班,转载请标记来源

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


# 提示:
# 每次运行程序,先去文件中读取所有注册过的用户数据,
# 程序运行完之后,将所有的用户数据再次写入到文件
# 可以把保存账号的列表转为字符串直接写入文件,读出来的时候,再把字符串转换为列表

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值