首页 > 编程语言 >python中文件操作相关基础知识

python中文件操作相关基础知识

时间:2022-10-09 19:11:57浏览次数:64  
标签:文件 encoding python 模式 基础知识 write txt open

python中文件操作相关基础知识

文件的概念

1,文件的概念?
   文件就是操作系统暴露给用户操作硬盘的快捷方式 ,
   当我们双击一个文件进行打开时,其实就是把硬盘中的数据加载到了内存中,然后展示给我们
   ctrl+s 保存文件时,其实就是命令系统立刻把内存中的数据刷新到硬盘中。
  
2.python代码如何打开文件
  方式1:
      f = open('文件路径','读写模式','编码设置')
      f.close 
      # 当打开文件使用完毕后需要关闭,方式1系统不会帮助你关闭文件
      
  方式2: 
      with语法
      with open(r'文件绝对路径','读写模式','编码设置') as 变量名:
      # 文件路径前面加上r 养成良好习惯,避免文件路径中含有特殊字符
        with语法不需要关闭文件,当此语法进行完毕系统会自动关闭文件
        也可以一次性打开多个不同的文件
       with open(r'文件绝对路径','读写模式','编码设置') as a,open(r'文件绝对路径','读写模式','编码设置') as b:

文件读写模式

1,什么是读写模式
   当我们打开一个文件时,我们要告诉计算机用什么方式打开有3种方式(r只读模式 w写入模式 a追加模式)
  
2.只读模式 'r'
  with open(r'/Users/moongod/Desktop/测试.txt','r',encoding='utf8') as f:
  		f.read()
  读写模式下只能对文件 只能读只能看不能写
  # 此模式下,如果文件路径不存在 则程序直接报错
  # 如果文件使用read方法可以直接读取
  # 如果文件较大 也可以使用for循环进行一行行阅读
  
3.只写模式 'w'
 with open(r'/Users/moongod/Desktop/测试.txt','w',encoding='utf8') as f:
  		f.write('写入的内容或变量名等')
      f.write('写入的内容或变量名等\n')
 只写模式下,如果文件被写入内容,则默认会清除之前的所有内容,只保留当前刚刚写下的内容
 # 注意 如果写入的内容需要换行,需要手动输入\n 换行符处理。
 # 并且在数据比对的时候 记得改文件换行时 有\n存在
 # 如果路径不存在,则会自动创建该文件

4.追加模式 'a'
 with open(r'/Users/moongod/Desktop/测试.txt','a',encoding='utf8') as f:
  		f.write('写入的内容或变量名等')
      f.write('写入的内容或变量名等\n')
 追加模式下。写入的内容会默认添加到文件尾部。
 # 如果需要换行 记得在文件最前面加上换行符 \n
 # 如果路径不存在,则会自动创建该文件

5 pass用法
  with open(r'/Users/moongod/Desktop/测试.txt','a',encoding='utf8') as f:
  		pass
  # 用于补全语法,无任何实际含义,有时候我们不知道写什么时,可以先写一个pass 

image

文件操作类型

1.文本模式 t
目前我们学的都是针对纯文本的文件操作,r w a 模式
#只能用来操作纯本文文件
#读写时都是以字符为单位
#需要设置encoding参数

2.二进制模(bytes模式)
 不是默认的模式,需要手动指定 rb wb ab
 #可以操作任意类型文件
 #读写都是以bytes为单位的
 #不需要encoding参数,因为它已经是二进制了

文件的方法

1,read()
文件.read() 
#一次性读取文件内所有内容,读取完后光标停留在文件末尾。如果在文件较大时不建议的使用 会导致内存溢出
2.for循环
for line in 文件名:
#一行行读取文件内容,避免内存溢出 (建议使用)
3.readline()
文件.readline
#一次只读一行内容
4.readlines()
文件.readlines()
#	一次性读取文件内容 会按照行数组织成列表的一个个数据值
5.readable()
文件.readable()  结果为 布尔值
#判断文件是否具备读数据的能力
6.write()
文件.write()   #(这里可以填写任意数据)
7.writeable()
	判断文件是否具备写数据的能力
8.writelines()
	接收一个列表 一次性将列表中所有的数据值写入
9.flush()
	将内存中文件数据立刻刷到硬盘 等价于ctrl + s

image

文件内光标的移动

关键词
seek
文件.seek(0,0)  
# seek(offset, whence)
offset是位移量 以字节为单位
whence是模式   0  1  2
0是基于文件开头
文本和二进制模式都可以使用
1是基于当前位置
只有二进制模式可以使用
2是基于文件末尾
只有二进制模式可以使用
#可以控制文件光标的位置

文件内容修改

1.先了解电脑硬盘修改数据原理
当我们把一些文件或数据等保存到硬盘时,其实就是对硬盘进行了刻字,如果我们需要修改文件时,其实就是硬盘把之前刻的字抹除再次重新刻上了你修改过的整体数据
硬盘删除数据原理
当你在硬盘中删除文件或数据时,其实并没有删除,只是把文件和数据的状态从可用占有状态,改为了不可用不显示不占用的状态,当没有新的数据覆盖上时,其实之前删除的数据还是存在的。
当有新的数据覆盖上旧数据才算是被真正删除掉。

2.在python中修改文件内容
  覆盖法:
  with open ('测试.txt','r',encoding='utf8') as f:
    d = f.read()
  with open ('测试.txt','w',encoding='utf8') as f:
    f.write(d.replace('修改内容','新的内容'))
   #先打开文件,然后使用另一个变量获取文件所有内容,然后再次使用写的模式打开文件
  #然后在文件中重新写入数据,使用replace方法替换原来的数据
  
  换地方重新写:
import os

with open('a.txt', 'r', encoding='utf8') as read_f, 
        open('.a.txt.swap', 'w', encoding='utf-8') as write_f:#.swap 临时文件
    for line in read_f:
        write_f.write(line.replace('tony', 'kevinSB'))

os.remove('a.txt')  # 删除了源文件
os.rename('.a.txt.swap', 'a.txt')  # 把临时文件改为了源文件名称
#在用户看来 感觉如同修改了源文件一样,其实是创建了一个临时文件重新写的

文件操作小练习

1.制作一个建议复制器,输入复制文件路径,输入新的文件路径 进行复制

file_path = input('请输入需要拷贝的文件路径').strip()
new_path = input('请输入新的文件路径').strip()
with open(file_path,'rb') as f, open(new_path,'wb') as f1:
    # 只读模式打开源文件  写入模式打开新文件,新文件不存在则会自动创建
    for line in f:
        # 使用临时变量 line 遍历 源文件
        f1.write(line)
        # 写入新文件,写入内容是 遍历的每一行的源文件 line
    print('拷贝成功')

2.利用文件充当数据库编写用户登录、注册功能 #文件名称: userinfo.txt
# 用户可以连续注册
# 用户可以多账号切换登录(多用户)
# 文件内有多个用户信息

while 1:
    print('''
        1.注册账户
        2.登录账户
        ''')
    cmd = input('请输入您要进行的指令').strip()
    if cmd == '1':
      	with open('/Users/moongod/Desktop/userinfo.txt', 'a', encoding='utf8') as d: 
          	pass   # 此代码只是为了先创建一个文件
        username = input('请输入用户名')
        with open('/Users/moongod/Desktop/userinfo.txt', 'r', encoding='utf8') as f: 
          #读取文件
            for line in f:  #临时变量去代替文件中的每一行
                real_name, real_pas = line.split('|')  # 解压赋值法 单行文本切割 获得已存在的账户和密码
                if real_name == username:  # 判断注册的用户名是否和文本中真实用户名冲突
                    print('用户名已被注册')
                    break
            else:
                password = input('请输入密码')
                with open('/Users/moongod/Desktop/userinfo.txt', 'a', encoding='utf8') as f1:
                    f1.write(f'{username}|{password}\n') # 存数据是规律组合 方便以后取
                print(f'注册成功,账户名:{username}')

    elif cmd == '2':
        username = input('请输入用户名')
        password = input('请输入密码')
        with open('/Users/moongod/Desktop/userinfo.txt', 'r', encoding='utf8') as f:
            for line in f:  # 账号|密码
                real_name, real_pas = line.split('|')  # 获得真实的账号密码
                if username == real_name and password == real_pas.strip('\n'): #做对比,注意真实的密码后面有换行符 需要去掉
                    print('登录成功')
                    break
            else:
                print('账号或密码错误')
    else:
        print('请输入正确的编号')

标签:文件,encoding,python,模式,基础知识,write,txt,open
From: https://www.cnblogs.com/moongodnnn/p/16773321.html

相关文章

  • 文件处理
    目录一.文件操作1.文件的概念2.代码打开文件的两种方式二.文件读写模式1.'r' 只读模式:只能读不能写2.'w' 只写模式:只能写不能看3.'a' 只追加模式:文件末尾添加......
  • python文件操作
    今日内容概要文件操作利用python代码的编写来读写文件1.文件的概念2.文件的操作方式3.文件读写模式4.文件操作模式5.文件诸多方法6.文件内容修改7.文件光标移......
  • python调用c++的方法,加速运算
    cpp源代码#include"iostream"usingnamespacestd;classCalc{public:intadd(inta,intb);};intCalc::add(inta,intb){cout<<"收到参数为a,b:"<<a<......
  • 网络基础系列(一)——基础知识
    一、公网及私网范围IP地址中预留了3个私有地址网段,在私有网络内,可以任意使用。其余的IP地址可以在互联网上使用,由IANA统一管理,称为公网地址。公网和私网之间通......
  • python函数
    今日内容概要文件内光标的移动实战演习计算机硬盘存取数据的原理文件内容修改函数简介函数的语法结构函数的定义与调用今日内容详细文件内光标移动案列(了解......
  • 【Visual Studio 2022】 首次安装出现 fatal error C1083: 无法打开包括文件:“crtdbg
    VS2022包括的版本如下:Windows版本WindowsSDK版本Windows10版本1903Windows10SDK版本1903(10.0.18362.1)Windows10版本2004Windows10SDK版本2004(10......
  • javaweb文件上传和下载
    案例1:文件随同表单一起上传前端页面<div><formclass="form-signin"id="addSongFormId"enctype="multipart/form-data"method="post">歌曲:<inputtype="file"id="fileS......
  • 文件操作
    文件操作1.文件的概念 就是操作系统暴露给用户操作硬盘的快捷方式 eg:双击一个文件其实是从硬盘将数据加载到内存ctrl+s保存文件其实是将内存中的数据刷......
  • 解决curl下载夹带中文的文件
    1.提供代码重点关注curl_escapeAPI#include<stdlib.h>#include<stdio.h>#include<sys/stat.h>#include<curl/curl.h>size_tgetcontentlengthfunc(void*p......
  • 文件操作及函数初识
    目录文件操作文件读写模式文件操作模式文件诸多方法文件内光标的移动文件内光标移动案例(了解)计算机硬盘修改数据的原理(了解)文件内容修改(了解)函数前戏函数的语法结构函数的......