文件操作

文件操作流程
1.打开文件,得到文件句柄并赋值给变量。
2.通过句柄对文件进行操作。
3.关闭文件。
读取数据
要使用文件中的信息,首先需要将信息读取到内存中,为此,那你可以一次读取文件的所有内容,也可
以每次逐行读取。
创建一个包含文件各行内容的列表
在使用with关键字时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外访问
文件内容,可以再with代码块内将文件的各行存储在一个列表,并在with代码快外使用该列表:这样我
们可以立即处理文件各个部分,也可以推迟到程序后面在处理。
下面的程序是将文件储存在列表中,在with代码块外打印它:

with open("file",encoding=("utf-8")) as file_object:
    lines = file_object.readlines()
    print(lines)
    for line in lines:
        print(line.rstrip())

读取整个文件
首先我们创造一个文件:file

《再别康桥》
作者:徐志摩
轻轻的我走了, 正如我轻轻的来;
我轻轻的招手,作别西天的云彩。
那河畔的金柳,是夕阳中的新娘;
波光里的艳影,在我的心头荡漾。
软泥上的青荇,油油的在水底招摇;
在康河的柔波里,我甘心做一条水草!
那榆荫下的一潭,不是清泉,是天上虹揉碎在浮藻间,沉淀着彩虹似的梦。
寻梦?撑一支长篙,向青草更青处漫溯,满载一船星辉,在星辉斑斓里放歌。
但我不能放歌,悄悄是别离的笙箫;
夏虫也为我沉默,沉默是今晚的康桥。

下面的程序打开文件:

with open("file",encoding=("utf-8")) as file_object: 
	contents =file_object.read()
print(contents)

以上程序打开文件,第一行代码,做了大量工作:open()函数接受一个参数,即要打开的文件名。python在当前当前所在目录中查找指定文件。open函数返回一个表示文件的对象。Python将这个对象存储在我们将在后面使用的变量中。
关键字with在不再需要访问文件后将其关闭。在这个过程中,我们发现我们调运了open(),但是没有调运close();想我们前面所述,调运open()以close()函数来打开和关闭文件,这样做如果程序存在bug,导致了close()语句没有执行,文件则不会关闭。我们知道,文件未妥善关闭可能导致数据丢失或受损。如果是在程序过早的调运了close(),你会发现在使用文件时,他已经关闭而无法使用,这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通过前面所示的结构,可以让python来决定,python会在适当的时候自动将其关闭。
实例:
1.遍历全文

f = open("file","r",encoding="utf-8")
for line in f.readlines():
    print(line.strip())
f.close()

2.读文件前五行

f = open("file","r",encoding="utf-8")
for i in range(5):
    print(f.readline())
f.close()

3.第十行不打印

f = open("file","r",encoding="utf-8")
for index,line in enumerate(f.readlines()):
    if index == 9:
        print("----------------分割线——————————————")
        continue
    print(line.strip())

文件路径
前面说过,open()打开文件时,是在当前目录下去查找需要被打开的文件。如果我们要打开的文件和程序文件不再同一个目录下,该怎么办?
这就需要绝对路径与相对路径。
逐行读取
之前所述的readlines读取文件,是先把文件读到内存中,然后在做处理,但是如果是大文件,这样显
然会有问题,为了解决这样的问题,我们需要将文件逐行读取。
例如:

with open("file",encoding=("utf-8")) as file_object:
    for line in file_object:
        print(line.rstrip())

大文件读取

f = open("passwd","r",encoding="utf-8")
count = 0
for line in f:
    if count == 9:
        print("-----------------分割线---------------")
        count += 1
        continue
    print(line.strip())
    count += 1

文件读取的原理,文件读取本质上是文件指针的移动

写入文件

保存数据最简单的方式就是将其保存到文件中。通过输出写入文件,即便是关闭包含程序输出的终端窗口,这些输出也依然存在,还可以编写程序来将这些输出读取到内存中并进行处理。
写入空文件
要将文本写入文件,你在调用open()时需要提供一个参数,告诉python你要打开文件了。

f = open("shige1",'w',encoding="utf-8") #文件句柄,(文件的内存对象);模式为新建一个文 件。
f.write("戈尔泰,大哥\n")
f.write("我爱北京天安门\n")
f.write("天安门上太阳升\n")
f.close()

打开文件时,可指定读取模式“r”,读写模式“w”,附加模式“a”,或者让你能够读取和写入的文件模式“r+”,python默认为只读。
如果你写的文件不存在,函数open将自动创建它。然而,已写入的模式打开文件时千万写小心,因为如果指定的文件已存在,则将会在返回文件对象前清空该文件。
文件的读写
一下只能写在文件的最后。

f=open("file","r+",encoding="utf-8")
print(f.readline())
print(f.readline())
print(f.readline())
f.write("-------------------—————diaobi———————————————")

文件写读:
先创先创新文件,在写入:

f = open("shige","w+",encoding="utf-8")
f.write("_____________________________diao________________________________\n")
f.write("_____________________________diao________________________________\n")
f.write("_____________________________diao________________________________\n")
f.write("_____________________________diao________________________________\n")
print(f.tell())
f.seek(10)
print(f.readline())
f.write("wo ai beijing tanan meng ")
f.close()

但是文件内容还是写到了最后
除此以外,还存在追加读写和二进制读写

f = open("shige","a+",encoding="utf-8") #文件句柄,追加读写

f = open("shige","wb") #文件句柄,二进制文件
f.write("hello binary\n".encode())
f.close()

追加文件

f = open("shige1",'a',encoding="utf-8") #文件句柄,(文件的内存对象);a = append表示 追加,也不具有读操作功能
f.write("戈尔泰,大哥\n")
f.write("我爱北京天安门\n")
f.write("天安门上太阳升\n")
f.close()

文件的持久化
例如:在我们安装软件的时候,出现的进度条,实际上就是这种持续刷新的过程。

#!/bin/python
import sys,time
for i in range(20):
 	sys.stdout.write("#")
 	sys.stdout.flush()
	time.sleep(0.1)

文件截断

f = open("shige","a",encoding="utf-8")
f.truncate(20)

修改文件
(1)将文件加载到内存中,在内存中修改
(2)打开一个新文件,在新文件中修改

f = open("write_file","r",encoding="utf-8")
f_new = open("write_file.bak","w",encoding="utf-8")
for line in f:
	if "徐志摩" in line:
		line = line.replace("徐志摩","anliu")
	f_new.write(line)
f.close()
f_new.close()

登录入口程序

#Author:Anliu
import json
import os
def read(file):
    '''读取文件file的内容'''
    with open(file, "r") as f:
        y = (json.load(f))
        f.close()
        return y
def write(file,y):
    '''在文件x中写入y'''
    with open(file, "w", encoding=("utf-8")) as f:
        json.dump(y, f)
        f.close()
def init(file):
    '''文件初始化'''
    if 0 == os.path.exists(file):
        _user = {}
        write(file,_user)
    if 0 ==os.path.getsize(file):
        _user = {}
        write(file,_user)
def login():
    '''读输入'''
    _username = input("请输入账号:")
    _password = input("请输入密码:")
    return _username,_password
def user_add():
    '''注册'''
    _username,_password=login()
    _user=read("passwd")
    for i in _user:
        if i==_username:
            print("已有用户请重新输入")
            break
    else:
        print("注册中,请稍后...")
        _user[_username] = {"password": _password, "key": 0}
        write("passwd", _user)
        print("注册成功,请登录!")
def user_key():
    '''登录锁定判断'''
    username,password=login()
    _user = read("passwd")
    for i in _user:
        if i == username:
            if _user[username]["password"]==password and _user[username]["key"]<3:
                print("登陆成功")
                exit()
            elif _user[username]["key"]==3:
                print("该用户已锁定")
                print("请联系管理员")
                exit()
            else :
                print("账户或密码错误")
                _user[x1]["key"] += 1
                if _user[x1]["key"] ==3:
                    for i in _user:
                        if _user[i]["key"] <3:
                            _user[i]["key"]=0
                    else:
                        write("passwd",_user)
                        exit()
def main():
    init("passwd")
    _user=read("passwd")
    name=("新用户注册","已有用户登陆")
    for lix,i in enumerate(name):
      print(lix,i)
    a=int(input("请选择:"))
    print(name[a])
    while a==0:
        user_add()
        a=1
    while a==1:
        user_key()
main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值