IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python文件操作 -> 正文阅读

[Python知识库]python文件操作

打开文件方式

r 只读方式,读取字符串
w 只写入方式,新写入内容覆盖旧的内容,写入字符串
a 追加写入的方式,写入字符串
rb 只读二进制方式,读取字节数据
wb 写二进制方式,写入字节数据
ab 追加二进制方式,追加写入字节
r+,读写方式,读取后,可在光标处写入,共用一个光标
w+,写读方式
a+,追加读方式

写入一个文件

#创建文件
f = open("test.txt","w",encoding="utf-8")
f.write("my name is jack\n")
f.write("i am 23 years old\n")
#手动关闭
f.close()

#with 作用域方式,自动关闭文件对象
with open("test.txt","w") as f:
	f.write("addr is China")
	

读取一个文件

f = open("test.txt",'r',encoding="utf-8")
content = f.read() #读取所有内容,返回字符串
line = f.readline() #读取一个行,返回字符串
lines = f.readlines() #读取所有的行,放入列表
part = f.read(100) #读取100个字符
f.seek(n,0) #移动光标,从起始位置0移动n个字节位置
f.seek(n,1) #1为当前位置, 2表示末尾位置
f.flush() #将内容从内存缓冲区,强制刷到磁盘

处理大文件

f2 = open("out.txt",'w')
with open("big_file.txt",'r') as f:
	for line in f:
		if 'xxx' in line:
			line = line.replace("xxx","a")
		f2.write(line)
	
f2.close()

练习

1. 抓取一张网络图片,保存在本地文件中
图片地址:https://wallpapertag.com/wallpaper/full/c/4/d/312839-dog-wallpaper-2880x1800-for-mobile.jpg

url = 'https://wallpapertag.com/wallpaper/full/c/4/d/312839-dog-wallpaper-2880x1800-for-mobile.jpg'

import requests
headers = {
  "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36",
}

res = requests.get(url,headers=headers)
print(res.status_code)

with open("dog.jpg","wb") as f:
  f.write(res.content) 

2. 通过命令行方式传入参数,实现文件内容的替换
针对如下文件data.txt:
My name is jack and my age is 23
i am from Chinese.
His name is tom. He is 20 years old.
Her name is lucy.

编写work.py 文件,实现如下方式的内容替换

python work.py  name  姓名  data.txt

最终将data.txt中的“name” 都替换为"姓名",并打印替换了多少次。

3.模拟登录
模拟登录
程序运行时,打印出如下选项:
1.注册 2.登录 3.退出

a. 用户输入对应数字,实现注册、登录
b. 用户注册的信息存入一个users.txt文件中,格式如下,
张三,xxxxx,0
李四,xxxxx,3

其中名字必须唯一,xxx代表用户密码的hash加密,后面的数字是输入密码错误次数。
错误三次,则锁定账户
注册完成后,再循环打印 1.注册 2.登录 3.退出

c. 用户登录时,加载users.txt信息,查找当前输入的用户名是否存在,
输入的密码是否正确。均正确,则检查账号是否锁定,未锁定则进入内部系统(使用
一个循环模拟,用户输入什么就打印什么,输入exit退出循环)

否则,就提示"用户名或密码不正确",且用户名正确,密码不正确时记录一次错误,
并写入users.txt

d. 密码输错三次后,账号锁定,后续再登录则提示账号已锁定

参考答案

  1. 爬取图片,图片为字节数据,存入文件中

  2. 命令行方式,替换文件中的全局内容

import sys
work,old_str,new_str,filename = sys.argv
print(old_str,new_str,filename)
count = 0
with open(filename,'r+',encoding="utf-8") as f:
    content = f.read()
    while old_str in content:
        content = content.replace(old_str,new_str,1)
        count += 1
    
    #写入
    f.write(content)
print("替换后的内容:",content)
print("总共替换%d次"%count)
  1. 模拟登录
from hashlib import md5

print("欢迎使用用户登录系统")
#打开文件
f = open("users.txt","r+",encoding="utf-8")
content = f.readlines()
print("content:",content)

while True:
    print("1.注册 2.登录 3.退出")

    option = input("请输入选项:").strip()
    if option == "1":
        #用户注册
        user = input("请输入用户名:").strip()
        pwd = input("请输入密码:").strip()
        #检查用户名是否存在
        exists = False
        if content:
            for i in content:
                if user in i:
                    print("用户已存在")
                    exists = True
                    break
        if not exists:
            cur_user = ""
            m = md5()
            m.update(pwd.encode("utf-8"))
            # print("check:",m.hexdigest())
            cur_user = "%s,%s,%d"%(user,m.hexdigest(),0)
            # print("cur_user:",cur_user)
            cur_user += "\n"
            # print(content)
            content.append(cur_user)
            #写入文件中
            f.write(cur_user)
            f.flush() #强制刷到磁盘
            print("注册成功!")
        
    elif option == "2":
        #用户登录
        user = input("输入用户名:").strip()
        pwd = input("输入密码:").strip()

        #验证用户名
        user_right = False
        account_lock = False
        pwd_error = 0
        for idx,i in enumerate(content):
            # print("current user:",i)
            if user in i:
                user_right = True
                #验证密码
                while i.split(",")[1] != md5(pwd.encode()).hexdigest():
                    print("用户名或密码不正确")
                    pwd_error += 1
                    if pwd_error == 3:
                        #锁定账户
                        print("账号已锁定")
                        account_lock = True
                        content[idx] = content[idx][:-2]+"%d\n"%pwd_error
                        f.seek(0,0)
                        f.writelines(content)
                        f.flush()
                        break              
                    user = input("输入用户名:").strip()
                    pwd = input("输入密码:").strip()
                #密码在锁定以后才输入正确
                if i[-2] == "3":
                    account_lock = True
                    print("账号已锁定")
                #密码在有限的次数内,输入正确
                if not account_lock:
                    print("欢迎进入图书系统")
                    print("退出with exit")
                    while True:
                        cmd = input("输入内容:")
                        if cmd != "exit":
                            print("你输入的:",cmd)
                        else:
                            break

    elif option in ("3","exit","Exit","quit","Quit"):
        print("程序退出")
        break
    elif option in ("help","?"):
        print("帮助信息:\n")
        print("输入1实现注册,输入2实现登录,输入exit则退出")

#关闭文件
f.close()

?
?
上一篇:python之二进制
下一篇:

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-11-18 11:09:13  更:2021-11-18 11:11:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:38:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码