标签:
1.文件的打开
打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作
文件句柄 = open(‘文件路径‘, ‘模式‘)
2.文件的读取
>>> f = open("f:/test.txt", "r") >>> f.read() ‘hello,world‘ >>> f.close
3.打开文件的模式有:
"+" 表示可以同时读写某个文件
>>> f = open("f:/test.txt", ‘r+‘) >>> f.read() ‘heheo,world~~‘ >>> f.write("\naaaaaaa") 8 >>> f.tell() 22 >>> f.read() ‘‘ >>> f.tell() 22 >>> f.seek(0) 0 >>> f.read() ‘heheo,world~~\naaaaaaa‘
"b"表示以字节的方式操作
#以二进制文件写 f = open("file.txt", "wb") str_data = "呵呵" bytes_data = bytes(str_data, encoding=‘utf-8‘) f.write(bytes_data) f.close()
#以二进制文件读 f = open("file.txt",‘rb‘) data = f.read() f.close() print(data) str_data = str(data,encoding="utf-8") print(str_data)
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型
4. r+, w+, x+, a+ 区别
r+ 可读,可写,若文件不存在会报错,根据指针位置可写随意位置
w+ 可写,可读,若文件不存在会创建,在进行写操作会清空文件内容
x+ 可写,可读,若文件存在会报错,不存在则创建
a+ 可写,可读,只能追加在文件尾部
5.文件内部支持操作:
readline() 逐行读取数据
#逐行去读,较省内存
f = open(‘log‘,‘r‘) result = list() for line in open(‘log‘): line = f.readline() print(line) result.append(line) print(result) f.close()
trancate(),从文件的首行首字符开始截断,截断文件为n个字符;无n表示从当前位置起截断;截断之后n后面的所有字符被删除
>>> with open("f:/test.txt" , ‘r+‘) as f: ... f.seek(2) ... f.truncate(3) ... 2 3 >>> with open("f:/test.txt" , ‘r+‘) as f: ... f.read() ... ‘hel‘
read(),读取文件内容
>>> with open("f:/test.txt" , ‘r+‘) as f: ... f.read() ... ‘hel‘
write(),写入内容
>>> with open("f:/test.txt" , ‘r+‘) as f: ... f.read() ... f.write(‘llo‘ + ‘\n‘ + ‘test‘) ... f.seek(0) ... f.read() ... ‘hel‘ 8 0 ‘helllo\ntest‘
readlines(), 将文件内容以列表的形式存放,---->[“第一行”, "第二行"]
>>> with open("f:/test.txt" , ‘r+‘) as f: ... temp = f.readlines() ... print(temp) ... [‘heheo,world~~\n‘, ‘aaaaaaa‘]
open(),打开文件
>>> f = open(‘f:/test.txt‘, ‘r‘)
close(),关闭文件
f.close()
flush(),强行刷入硬盘
tell() 获取指针位置
seek() 跳转到某个位置
为了避免打开文件后忘记关闭,可以通过管理上下文
with open("log", ‘r+‘) as f: data = f.read() print(data)
三.练习
编写脚本实现 ,用户登录,注册,改密,删除功能
#!/usr/bin/env python # -*- coding:utf-8 -*- #删除用户,修改密码 def login(username, password): """ 用户登录验证 :param username: 用户名 :param password: 密码 :return: True成功,False失败 """ f = open(‘log‘, ‘r‘, encoding=‘utf-8‘) for line in f: line = line.strip() userlist = line.split(‘$‘) if username == userlist[0] and password == userlist[1]: return True return False def user_ex(username): """ 用于检测用户是否存在 :param username: 用户名 :return: True 表示存在,False用户不存在 """ with open(‘log‘,‘r‘,encoding=‘utf-8‘) as f: for line in f: line = line.strip() userlist = line.split(‘$‘) if username in userlist: return True return False def res(username, password): """ 用于用户注册 :param username: 用户名 :param password: 密码 :return: True注册成功 """ with open(‘log‘,‘a‘,encoding=‘utf-8‘) as f: temp = "\n" + username + "$" + password f.write(temp) return True def change_pwd(username, password): """ 用户修改密码 :param username: 用户名 :param password: 修改后的密码 :return: True修改成功,False修改失败 """ file_object = open(‘log‘) try: lines=open(‘log‘,‘r‘).readlines() for i in range(len(lines)): if username in lines[i]: test=lines[i].split(‘$‘)[1] lines[i]=lines[i].replace(test,password) open(‘log‘,‘w‘).writelines(lines) return True return False finally: file_object.close( ) def del_user(username): """ 删除用户 :param username: 要删除用户名 :return: true 删除成功,False用户名不在列表中 """ file_object = open(‘log‘) try: lines = open(‘log‘, ‘r‘).readlines() for i in range(len(lines)): if username in lines[i]: del lines[i] print(lines) open(‘log‘,‘w‘).writelines(lines) return True else: return False finally: file_object.close() # def del_user(username): # with open(‘log‘, ‘r‘) as f: # for line in f: # if re.match("lisi", line): # pass # else: # data = line # with open(‘log‘, ‘w+‘) as f: # f.write(data) # return True # return False def main(): inp = input("1:登录;2:注册;3:删除用户;4:修改密码") user = input("请输入用户名:") pwd = input("请输入密码:") if inp == "1": ret = login(user, pwd) if ret: print("登录成功") else: print("登录失败") elif inp == "2": is_ex = user_ex(user) if is_ex: print("用户已存在,无法注册") else: resgister = res(user, pwd) if resgister: print("用户已成功注册") else: print("注册失败") elif inp == "3": del_us = del_user(user) if del_us: print("已删除") else: print("无此用户") elif inp == "4": is_chage = change_pwd(user, pwd) if is_chage: print("修改成功") else: print("无此用户") main()
标签:
原文地址:http://www.cnblogs.com/jl-bai/p/5485775.html