第六篇.文件处理

一.文件操作

1.1介绍

计算机系统分为:计算机硬件,操作系统,应用程序三部分.
我们用python或其他语言编写的应用程序若想要把数据永久保存下来,必须要保存于硬盘中,这就涉及到应用程序要操作硬件,众所周知,应用程序
是无法直接操作硬件的,这就用到了操作系统.操作系统把复杂的硬件操作封装成简单的接口给用户/应用程序使用,其中文件就是操作系统提供给
应用程序来操作硬盘虚拟概念,用户或应用程序通过操作文件,可以将自己的数据永久保存下来.

 操作文件的流程

1. 打开文件,得到文件句柄并赋值给一个变量
2. 通过句柄对文件进行操作
3. 关闭文件

1.2python中

#1. 打开文件,得到文件句柄并赋值给一个变量
f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r
#2. 通过句柄对文件进行操作
data=f.read()
#3. 关闭文件
f.close()

1.3f=open('a.txt','r')的过程分析

1、由应用程序向操作系统发起系统调用open(...)
2、操作系统打开该文件,并返回一个文件句柄给应用程序
3、应用程序将文件句柄赋值给变量f

1.4打开文件所需的资源

打开文件需要两方面资源,操作系统把文件打开,应用程序要拿到这个变量

二.打开文件的字符编码

#默认的打开文件的编码是:当前操作系统默认的编码,win:gbk,linux:utf-8
f=open('a.txt',mode='r',encoding='utf-8')
print(f.read())
f.close()

三.文件的打开模式

3.1文件打开的r模式

r:默认的打开模式,只读模式
注意:当文件不存在时,报错
f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
# f.write('哈哈啊哈哈啊啊 啊啊123213213123\n') #抛出异常,不能写
# print(f.readable())
print('=============>1')
print(f.read())

print('=============>2')
print(f.read())

f.close()

f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
print(f.readline(),end='')
print(f.readline(),end='')
print(f.readline(),end='')
f.close()

f=open('a.txt',mode='r',encoding='utf-8') #mode='rt'
print(f.readlines())
f.close()

with open('a.txt',encoding='utf-8') as f:
    for line in f:
        print(line,end='')

    print(f.readlines())
    for line in f.readlines(): #循环文件不要使用该方式,因为在文件过大的情况下有可能会撑爆内存
        print(line,end='')

3.2文件打开的w模式

w:只写模式
注意
1、当文件存在时,清空
2、当文件不存在时,创建空文档
f=open(r'a1.txt',mode='w',encoding='utf-8') #默认是wt
# f.write('第一行\n')
# f.write('第二行\n')

# f.writelines(['111111\n','222222\n','333333\n'])
f.write('aaaaaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbbb\nccccccccccccccc\n')

f.close()

3.3文件打开的a模式

a:只追加写模式
注意:
在文件不存在时,创建空文件
在文件存在时,光标直接跑到文件末尾
f=open('access.log',mode='a',encoding='utf-8')
# print(f.writable())
# f.readlines() #报错

f.write('5555555555555\n')

f.close()

四.文件内光标的移动

with open('user.txt','r+',encoding='utf-8') as f:
    f.seek(9) #偏移量的单位是字节 utf-8一个字符3个字节
    # print(f.tell())
    print(f.read())

with open('user.txt','r+',encoding='utf-8') as f:
    f.seek(9) #偏移量的单位是字节
    # print(f.tell())
    f.write('[老男孩第二帅的人]')

五.文件的修改

5.1文件修改的两种方式

#修改文件方式一:
#1、先把文件内容全部读入内存
#2、然后在内存中完成修改
#3、再把修改后的结果覆盖写入原文件
#缺点:会在文件内容过大的情况下,占用过多的内存

with open('user.txt',mode='r',encoding='utf-8') as f:
    data=f.read()
    data=data.replace('吴佩其','吴佩其[老男孩第二帅的人]')

with open('user.txt',mode='w',encoding='utf-8') as f:
    f.write(data)

#修改文件方式二:
#1、以读的方式打开原文件,以写的方式打开一个新文件
import os

with open('user.txt',mode='rt',encoding='utf-8') as read_f,\
        open('user.txt.swap',mode='wt',encoding='utf-8') as write_f:

    for line in read_f:
        if '吴佩其' in line:
            line=line.replace('吴佩其','吴佩其[老男汉特别特别的老]')

        write_f.write(line)

os.remove('user.txt')
os.rename('user.txt.swap','user.txt')
posted @ 2018-12-28 20:34  王苗鲁  阅读(89)  评论(0编辑  收藏  举报