Python中的File(文件)操作

这篇具有很好参考价值的文章主要介绍了Python中的File(文件)操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python中的File(文件)操作

针对磁盘中的文件的读写。文件I/O I 输入(input) O输出(Output)

文件操作步骤:1.打开文件 2.读写文件 3.关闭文件

写入文件的操作:(把大象装进冰箱)
  1. 打开文件 open() ==> 打开冰箱
  2. 写入内容 write() ==> 把大象装进冰箱
  3. 关闭文件 close() ==> 关闭冰箱门
读取文件的操作:(把大象从冰箱中取出)
  1. 打开文件 open() ==> 打开冰箱门
  2. 读取内容 read() ==> 把大象拿出来
  3. 关闭文件 close() ==> 关闭冰箱门

文件操作相关函数

open() 打开文件

格式: open(文件的路径,打开的方式,[字符集])

Seek() 设置文件指针的位置
fp.seek(0)  # 把文件指针设置到文件的开头位置
fp.seek(10)   # 设置文件指针的位置
fp.seek(0,2)  # 0,2是把文件指定设置在文件的末尾
write() 写入内容

格式:文件对象.write(字符串)

writelines() 写入容器类型数据

格式:文件对象.write(容器类型数据)

注意:容器类型数据中的元素也必须是可写入的字符串类型

read() 读取内容

格式:文件对象.read() 从当前指针位置读取到最后

格式:文件对象.read(读取的字节数) 可以读取指定长度的字符

readline() 读取一行

格式: 文件对象.readline() 一次读取一行

格式: 文件对象.readline(字节数) 一次读取一行中指定长度的字节

readlines() 读取所有行

格式: 文件对象.readlines() 读取所有行,每一行作为一个元素,返回了一个列表

格式:文件对象.readlines(6) 按照行进行读取,可以设置读取的字节数,设置的字节数不足一行按一行算

close() 关闭文件

格式:文件对象.close() 关闭打开的文件

文件操作的高级便捷写法
# 文件操作的 高级写法
'''
with open(文件路径,打开模式) as 变量:
    变量.操作()
'''

with open('./1.txt','r+',encoding='utf-8') as fp:
    res = fp.read()
    print(res)
文件的路径:
文件路径  路径 url  统一资源定位符
    
#相对路径: 就像给别人指路一样: 在某某大厦的对面。。。
    针对文件的相对路径的表示,从当前目录开始计算
     1.txt ==>  具体文件前没有任何表示时,默认为当前目录 和 ./1.txt 是一个位置
     ./1.txt  ==> ./ 代表当前目录中的 1.txt
     ../1.txt ==> ../ 代表当前目录中的 上一级目录中的1.txt
#绝对路径: 就像买东西写收货地址一样: 北京市海淀区中关村大街128号xxx小区,xxx号楼xx单元xx室
    windows:  c:/users/appdata/1.txt
    Linux: /user/home/yc/1.txt
打开的模式:
#一,基础模式:  w  r  x  a
  w w模式  write 写入模式
      1。 文件如果不存在,则创建这个文件
      2。 文件如果存在,则打开这个文件,并且清空文件内容
      3。 文件打开后,文件的指针在文件的最前面

  r r模式: read  读取模式
      1。 如果文件不存在,则报错
      2。 文件如果存在,则打开文件
      3。 文件指针在文件的最前面

  x x模式: xor 异或模式
      1。文件不存在,则创建这个文件
      2。文件已存在,则报错(防止覆盖)
      3。文件的指针在文件的最前面

  a a模式: append 追加模式
      1。文件不存在,则创建文件
      2。文件如果存在,则打开文件 (和w模式的区别在于。a模式打开文件后不会清空)
      3。文件指针在当前文件的最后

#二,扩展模式:
            b b模式  bytes   二进制
            + +模式  plus    增强模式(可读可写)
#三,文件操作模式的组合:
            w,r,a,x
            wb,rb,ab,xb,
            w+,r+,a+,x+
            wb+,rb+,ab+,xb+
 参数 encoding 可选参数,设置文件的字符集,
    如果是一个二进制的文件时,不需要设置字符集
    encoding='utf-8'        
# 写入文件操作
# 1。打开文件
fp = open('./1.txt','a',encoding='utf-8')
# 2。写入 文件
fp.write('\n你好')
# 3。关闭文件
fp.close()
# 读取操作
# 1。打开文件
fp = open('./1.txt','r',encoding='utf-8')
# 2。读取文件
res = fp.read()
# 3。关闭文件
fp.close()
print(res)

# 文件操作的 高级写法
'''
with open(文件路径,打开模式) as 变量:
    变量.操作()
'''
# w+ 即可读又可写  注意w模式的特点,是打开文件后直接清空了文件
# r+ 即可读又可写
# a+ 追加写,并且可读
# x+ 异或
with open('./1.txt','r+',encoding='utf-8') as fp:
    # 设置指针的位置
    fp.seek(20)  # 设置当前指针的位置
    fp.write('cc')
    fp.seek(0)  # 设置当前指针的位置 seek(0),最开始的位置
    res = fp.read()
    print(res)
# 写入相关函数
vars = 5211  # int类型无法写入
vars = ['hello','world','1','2']
vars = {'name':'zs','age':'22'}
with open('./test/4.txt','w',encoding='utf-8') as fp:
    # fp.write(vars)  # 只能写入字符串类型数据
    fp.writelines(vars)  # 可以写入容器类型数据,注意容器中的元素也必须是字符串类

# 读取相关函数
with open('./test/4.txt','r',encoding='utf-8') as fp:
    fp.seek(3)  # 设置指针的位置
    res = fp.read()  # 默认从当前指针开始读取到最后
    res = fp.read(3)   # 设置读取的字节长度
    res = fp.readline()  # 一次只读取一行内容
    print(res)
    res = fp.readline(3) # 可以读取当前行中的指定字节数
    res = fp.readlines()  # 一次读取多行数据,每一行作为一个元素,返回一个列表
    res = fp.readlines(6)  # 按照行进行读取,可以设置读取的字节数,设置的字节数不足一行按一行算
    print(res)

# seek() 设置文件指针位置
with open('./test/4.txt', 'r+', encoding='utf-8') as fp:
    # a+模式,指针默认在文件的最后,所以直接读是读取不到内容的
    fp.seek(0)  # 把文件指针设置到文件的开头位置
    fp.seek(10)   # 设置文件指针的位置
    fp.seek(0,2)  # 0,2是把文件指定设置在文件的末尾
    fp.write('\n00000')
    res = fp.read()

# truncate() 截断文件内容
with open('./test/4.txt','r+',encoding='utf-8') as fp:
    res = fp.truncate(5)
    # 默认从文件的首行的首个字符开始进行截断,截断的长度为size个字节数,
    # size如果为0,则从当前位置截断到最后
    
 print(res)

练习题:注册与登录

注册功能

1。需要用户名和密码以及确认密码
2。注册时如果用户名已经存在,则不能再次注册

登录功能

1。需要使用已经注册的用户信息登录
2。密码输入错误3次后,锁定账户信息(不能再使用这个账户进行登录操作)文章来源地址https://www.toymoban.com/news/detail-663676.html

# 登录和注册功能的合并


# 专门定义数据变量,存放已经注册的用户信息
userlist = [] # 存放所有的用户名
pwdlist = [] # 存放所有的用户密码
blacklist = [] # 存放所有的黑名单用户


# 读取所有数据的方法
def readallusers():
    # 读取所有的注册信息 使用a+模式打开文件,在调整指针位置,防止文件不存在时报错
    with open('./user.txt','a+',encoding='utf-8') as fp:
        fp.seek(0) # 调整当前的的指针位置到文件头部
        res = fp.readlines()  # 按照每一行读取所有的用户数据
        for i in res:  # 循环读取的每一行数据
            r = i.strip()  # 处理每一个换行 admin:123\n ==> admin:123
            arr = r.split(':')  # admin:123 ==> ['admin','123']
            userlist.append(arr[0]) # 把用户名追加到 用户名列表中
            pwdlist.append(arr[1])  # 把用户对应的密码 追加到 用户密码 列表中

    # 获取黑名单数据
    with open('./black.txt','a+',encoding='utf-8') as fp:
        fp.seek(0)
        res = fp.readlines()
        for i in res:
            blacklist.append(i.strip())


# 封装一个函数 完成注册功能
def register():
    # 定义一个变量。用于控制外循环
    site = True
    # 循环执行 用户名输入操作
    while site:
        # 用户输入用户名
        username = input('欢迎注册,请输入用户名:')
        # 用户名需要检测是否已经存在
        if username in userlist:
            print('当前用户名已经存在,请更换用户名')
        else:
            # 循环输入密码,如果都正确,循环结束,
            while True:
                # 输入密码
                pwd = input('请输入密码:')
                # 检测密码从长度不能低于3位
                if len(pwd) >= 3:
                    # 输入确认密码
                    repwd = input('请输入确认密码:')
                    # 检测确认密码是否和密码一致
                    if pwd == repwd:
                        # 用户名和密码都正确,就可以写入文件  用户名:密码
                        # 打开文件,写入数据
                        with open('./user.txt','a+',encoding='utf-8') as fp:
                            fp.write(f'{username}:{pwd}\n')
                        print(f'注册成功:用户名:{username}')
                        # 结束循环
                        # 结束外循环
                        site = False
                        # 结束内循环
                        break
                    else:
                        print('两次密码不一致,请重新输入')
                else:
                    print('密码格式不正确')


# 封装函数实现登录功能
def login():
    # 定义变量 控制登录的外循环
    islogin = True
    # 定义变量,用户密码的错误次数的检测
    errornum = 3

    # 循环执行用户的登录
    while islogin:
        # 获取用户登录时输入的用户名
        username = input('欢迎登录,请输入您的用户名:')
        # 检测当前用户名是否存在
        if username in userlist:
            # 检测用户是否属于锁定状态? 判断是否在黑名单中
            if username in blacklist:
                print('当前用户属于锁定状态,不可登录,请去忏悔把。。。')
            else:
                # 定义循环,执行密码输入
                while True:
                    # 让用户输入密码
                    pwd = input('请输入您的密码:')
                    # 获取用户名在用户列表中的索引。
                    inx = userlist.index(username)
                    # 检测用户输入的密码是否正确
                    if pwd == pwdlist[inx]:
                        print('登录成功')
                        # 结束循环
                        islogin = False # 结束外循环变量
                        break  # 结束内循环
                    else:
                        # 密码错误,则修改次数变量
                        errornum -= 1
                        # 判断当前的密码错误次数 == 0
                        if errornum == 0:
                            print('曾经有那么几次机会摆在你的面前。你没有把握住,恭喜你,成功的锁定了你的账户,请联系相关人员进行忏悔把!')
                            # 如何才能锁定账户信息? 把需要锁卡的用户拉入黑名单
                            with open('./black.txt','a+',encoding='utf-8') as fp:
                                fp.write(username+'\n')
                            # 结束循环
                            islogin = False  # 结束外循环变量
                            break  # 结束内循环
                        else:
                            print(f'密码输入错误,请重新输入密码,你还有{errornum}次机会')
        else:
            #用户名不存在
            print('用户名错误,请重新输入')


# 判断当前的脚本是否作为一个主进程脚本在执行
if __name__ == '__main__':
    # 这里的代码,只有在使用python解释器直接运行时才执行
    # 如果当前的脚本。作为了一个模块被其它的文件导入后使用,那么这个地方的代码不会执行
    # 因此这个地方的代码 适合写当前脚本中的一些测试,这样不会影响其它脚本

    # 调用初始化方法,加载数据
    readallusers()

    while True:
        vars = '''
        ***************************************
        **    登录(1)  注册(2) 退出(任意内容)   **
        ***************************************
        '''
        print(vars)

        # 让用户选择对应的操作
        num = input('请输入对应的序号,体验功能:')

        if num == '1':
            login()
        elif num == '2':
            register()
        else:
            print('欢迎下次体验。。。')
            break

# 扩展题: 可以实现 购物,定义一些商品和对应的价格,每个用户有100原,完成购物即扣款

到了这里,关于Python中的File(文件)操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# File类中的文件读写方法

    C# 提供了多种操作文件的方案, File 类中封装的静态方法,接口封装得比较人性化,隐藏了具体实现的细节,主要包括读取、写入以及追加,这些函数如下 类别 字节读写 字符串列表 字符串 读取 ReadAllBytes ReadAllLines ReadAllText ReadLines 写入 WriteAllBytes WriteAllLines WriteAllText 追加

    2024年02月06日
    浏览(38)
  • 【JAVA】#详细介绍!!! 文件操作之File对象(1)!

    本文内容不涉及文件内容操作,主要是对指定文件元信息的获取,以及通过java代码如何创建一个文件或者删除文件 目录 文件操作的File对象  File对象的基本操作方法 得到文件(夹)对象的信息元 1.getParent 2. getName 3.getPath  4. getAbsolutePath和getCanonicalPath 文件和目录的创建 文件

    2024年02月02日
    浏览(38)
  • Axios 中的文件上传(Upload File)方法

    FormData是一个用于创建表单数据的 API,可用于发送包含文件和其他表单数据的multipart/form-data请求。这是处理文件上传的常用方法。通过FormData对象,可以将文件数据添加到表单中,然后使用 Axios 的post或put方法发送请求。 除了使用 FormData ,你还可以通过在 URL 参数中指定文件

    2024年04月27日
    浏览(34)
  • 优雅的操作文件:java.nio.file 库介绍

    在早期的 Java 版本中,文件 IO 操作功能一直相对较弱,主要存在以下问题: 缺乏对现代文件系统的支持:只提供的基础的文件操作,不支持很多现代的文件系统 API 不够直观:文件操作的 API 设计相对较为复杂和冗长,使用体验感很差 对于大文件处理和并发性能不够:简单的

    2024年02月03日
    浏览(48)
  • 最新PyCharm基本使用(1)------文件(File)设置、管理操作

    目录 一、PyCharm界面布局 二、PyCharm的界面颜色、字体、汉化、indexes、python interpreter设置、创建项目(或文件、模版)、打开、导出等文件操作        这里介绍的内容主要是基于python的PyCharm的基本使用。文中没有特别说明,一般是默认针对python的PyCharm的功能解释,在python项目

    2023年04月25日
    浏览(35)
  • Node.js中的文件系统(file system)模块

    聚沙成塔·每天进步一点点 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发者,这里都将为你提供一个系统而

    2024年02月04日
    浏览(44)
  • JS中的File(四):文件流Streams API使用详解

    目录 一、流的原理 二、流的分类 1、可读流(ReadableStream) 3、转换流(TransformStream) 三、流中的Request和Response对象 四、综合应用 PS:涉及到一些基本的文件操作和格式内容知识,可以进入我的主页参考我之前的此系列文章。这个系列我还会继续更新下去的~ 参考: 从 Fetc

    2024年01月19日
    浏览(27)
  • Unity学习笔记--File.ReadAllLines和File.ReadAllText的使用以及注意事项(一定要看到最后!!!)

    最近在做文件存储以及读取的时候,需要用到C#给我们提供的类: File 具体使用方法可以看官方文档:C# File 类 这篇文章只会说 File.ReadAllLines 和 File.ReadAllText 的使用以及注意事项 Tips:(一定要看到最后!!!) 一、File.ReadAllLines 重载 操作 ReadAllLines(String) 打开一个文本文件

    2024年02月02日
    浏览(40)
  • 【JavaEE】文件操作: File 类的用法和 InputStream, OutputStream 的用法

    目录 1. File 概述 1.1 File的属性 1.2 File的构造方法 1.3 File的方法 2.读文件 2.1 InputStream 概述 2.2 FileInputStream 概述 2.3 正确打开和关闭文件的方式 2.4 不同方式读取文件代码示例 2.4 另一种方法:利用 Scanner 进行字符读取 3.写文件 3.1 OutputStream 概述 3.2 利用 OutputStreamWriter 进行字符写

    2024年01月19日
    浏览(29)
  • Linux区分文件类型,file指令,目录权限,umask掩码,共享文件,Linux中的一些有趣指令

    所属专栏:Linux学习❤️ 🚀 博主首页:初阳785❤️ 🚀 代码托管:chuyang785❤️ 🚀 感谢大家的支持,您的点赞和关注是对我最大的支持!!!❤️ 🚀 博主也会更加的努力,创作出更优质的博文!!❤️ 🚀 关注我,关注我,关注我,重要的事情说三遍!!!!!!!!

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包