Python之文件操作

时间:2022-05-08
本文章向大家介绍Python之文件操作,主要内容包括文件操作、文件编码、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。

文件操作

首先新建一个文件  比如      模特主妇护士班主任.txt 

计算机想要访问这个文件需要经历的步骤是:

1、文件路径:d:模特主妇护士班主任.txt

2、编码方式:utf-8 gbk ....

3、操作方法:只读、只写、追加、读写、if 写读....:

4、以什么编码方式储存的文件,就以什么编码方式打开进行操作。

什么是绝对路径和相对路径?

绝对路径是文件直接存储在计算机的硬盘里,比如直接存储在C盘里、D盘里或是E盘里;

相对路径是文件没有直接存储在计算机的硬盘里,比如存储在C盘里的一个文件夹中等。

文件编码

 f=open(...)是由操作系统打开文件,那么如果我们没有为open指定编码,那么打开文件的默认编码很明显是操作系统说了算了,操作系统会用自己的默认编码去打开文件,

在windows下是gbk,在linux下是utf-8。

f = open('模特主妇护士班主任',mode='r',encoding='utf-8')

只读文件:'r'代表只读方式 'rb'直接编码成bytes类型(非文字文件,还有就是上传和下载)     

1.读文件的第一种方式:read方法,用read方法会一次性的读出文件中的所有内容

f = open('模特主妇护士班主任',mode='r',encoding='utf-8')   
content = f.read()
print(content)
f.close()

2.读一部分内容:read(n),指定读n个单位

print(f.read(5))

3.读文件的第三种方式:按照行读,每次执行readline就会往下读一行

print('readline : ',content.strip())    #strip去掉空格、制表符、换行符
content2 = f.readline()
print(content2.strip())

print(1)  #--> 1n
print('1n')  #--> 1nn

4.读文件的第四种方式:readlines,返回一个列表,将文件中的每一行作为列表中的每一项返回一个列表

content = f.readlines()
print('readlines : ',content)

5.读:最常用    for循环

f = open('模特主妇护士班主任,encoding='utf-8')
for l in f:
    print(l.strip())

关闭文件             f.close()      必须在程序最后加上这个,可以清理内存。

f = open('模特主妇护士班主任',mode='rb',)
content = f.read()
print(content)
f.close()

 只写文件:只写:w          没有此文件,就会创建文件

#对于w:没有此文件就会创建文件
f = open('log',mode='w',encoding='utf-8')
f.write('骑兵步兵')
f.close()

先将源文件的内容全部清除,在写。
f = open('log',mode='w',encoding='utf-8')
f.write('附近看到类似纠纷')
f.close()


f = open('log',mode='w+',encoding='utf-8')
f.write('aaa')
f.seek(0)
print(f.read())
f.close()


f = open('log',mode='wb')
f.write('附近看到类似纠纷'.encode('utf-8'))
f.close()

 追加

f = open('log',mode='a',encoding='utf-8')
f.write('佳琪')
f.close()

f = open('log',mode='a',encoding='utf-8')
f.write('佳琪')
f.close()

# 带+号的增加有附带功能,比如r+代表在只读的情况下增加了写的功能,代表先读后写,其余的情况类似。

其他功能详解

obj = open('log',mode='r+',encoding='utf-8')
content = f.read(3)  # 读出来的都是字符
f.seek(3)  # 是按照字节定光标的位置
f.tell() 告诉你光标的位置
print(f.tell())
content = f.read()
print(content)
f.tell()
f.readable()  # 是否刻度
line = f.readline()  # 一行一行的读
line = f.readlines()  # 每一行当成列表中的一个元素,添加到list中
f.truncate(4)
for line in f:
    print(line)
f.close()

seek  是按照字节移动光标

tell   是告诉你目前光标的位置

例题:用户先注册账号和密码到一个文件里,然后等待用户登录,从文件里调出注册的账号和密码与之比较,正确登陆成功,允许有三次错误登陆机会

username = input('请输入你要注册的用户名:')
password = input('请输入你要注册的密码:')
with open('list_of_info',mode='w',encoding='utf-8') as f:
    f.write('{}n{}'.format(username,password))
print('恭喜您,注册成功')
lis = []
i = 0
while i < 3:
    usn = input('请输入你的用户名:')
    pwd = input('请输入你的密码:')
    with open('list_of_info',mode='r+',encoding='utf-8') as f1:
        for line in f1:
            lis.append(line)
    if usn == lis[0].strip() and pwd == lis[1].strip():
        print('登录成功')
        break
    else:print('账号和密码错误')
    i+=1

 总结:

# 文件处理
    # 打开文件
        #open('路径','打开方式','指定编码方式')
        # 打开方式 r w a r+ w+ a+ b     用的最多就是r w a ,带+号的一般不用,不管是先读后写还是先写后读都会让光标发生变化,
                                        # 所以最好读写不要在一起
            #r+ 打开文件直接写 和读完再写
        # 编码方式 —— utf-8
    # 操作文件
        # 读
            # read 一次性读
            # readlines 一次性读
            # readline 一行一行读
                #不知道在哪儿结束
                #视频 图片 rb bytes 按照字节读
            # for循环 —— 最好!!!
        # 写
            # write
        # 光标 —— 文件指针
            #seek _ 指定光标移动到某个位置
            #tell _ 获取光标当前的位置
            #truncate _ 截取文件
    # 关闭文件
        #close

 修改文件实例

修改文件

思路:把原有文件的内容先修改,然后把修改后的文件全部放在一个新的空文件里,把原文件删除

with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2:
    for line in f:
        if '星儿' in line:  #班主任:星儿
            line = line.replace('星儿','啊娇')
        #写文件
        f2.write(line) #小护士:金老板

import os
os.remove('小护士班主任') #删除文件
os.rename('小护士班主任.bak','小护士班主任')  #重命名文件