美文网首页
Python-part7-文件

Python-part7-文件

作者: 船长captian | 来源:发表于2018-08-10 21:00 被阅读0次

1 什么是文件

文件是操作系统为用户/应用程序提供的一种操作硬盘的抽象单位

2 为何要用文件

用户/应用程序对文件的读写操作会由操作系统转换成具体的硬盘操作
所以用户/应用程序可以通过简单的读\ 写文件来间接地控制复杂的硬盘的存取操作
实现将内存中的数据永久保存到硬盘中
user=input('>>>>: ') #user="egon"

3 如何用文件

文件操作的基本步骤:
f=open(...) #打开文件,拿到一个文件对象f,f就相当于一个遥控器,可以向操作系统发送指令
f.read() # 读写文件,向操作系统发送读写文件指令
f.close() # 关闭文件,回收操作系统的资源

上下文管理:

with open(...) as f:
pass

open(r'D:\SH_fullstack_s3\day07\a.txt')
f=open(r'a.txt',encoding='utf-8') #向操作系统发送请求,要求操作系统打开文件

print(f) # f的值是一个文件对象
print(f.read())

f.close() # 向操作系统发送请求,要求操作系统关闭打开的文件
print(f)
f.read()

强调:一定要在程序结束前关闭打开的文件

上下文管理with

  with open(r'a.txt',encoding='utf-8') as f,\
          open('b.txt',encoding='utf-8') as f1:
      print(f.read())
      print(f1.read())

可读可写:

r+t

w+t

a+t

with open('a.txt',mode='r+t',encoding='utf-8') as f:
    # print(f.readable())
    # print(f.writable())
    msg=f.readline()
    print(msg)
    f.write('xxxxxxxxxxx\n')

with open('c.txt','r+t',encoding='utf-8') as f:
f.seek(13,0)
# f.write('xxx')
f.write('h')

f.seek

文件内指针移动,只有t模式下的read(n),n代表的字符的个数
除此以外文件内指针的移动都是以字节为单位

with open('a.txt',mode='rt',encoding='utf-8') as f:
    msg=f.read(1)
    print(msg)

with open('a.txt',mode='rb') as f:
    msg=f.read(3)
    print(msg.decode('utf-8'))

f.seek(offset,whence)有两个参数:

offset: 代表控制指针移动的字节数
whence: 代表参照什么位置进行移动
whence = 0: 参照文件开头(默认的),特殊???,可以在t和b模式下使用
whence = 1: 参照当前所在的位置,必须在b模式下用
whence = 2: 参照文件末尾,必须在b模式下用

with open('a.txt',mode='rt',encoding='utf-8') as f:
    f.seek(6,0)
    msg=f.read(1)
    print(msg)

with open('a.txt',mode='rb') as f:
    f.seek(3,0)
    msg=f.read(3)
    print(msg.decode('utf-8'))

with open('a.txt',mode='rb') as f:
    msg=f.read(3)
    # print(msg.decode('utf-8'))
    print(f.tell())
    # f.seek(6,0)
    f.seek(3,1)
    msg1=f.read(3)
    print(msg1.decode('utf-8'))


with open('a.txt',mode='rb') as f:
    msg=f.read(3)
    # print(msg.decode('utf-8'))
    print(f.tell())
    # f.seek(6,0)
    f.seek(3,1)
    msg1=f.read(3)
    print(msg1.decode('utf-8'))


with open('a.txt',mode='rb') as f:
    # f.seek(0,2)
    # print(f.tell())
    f.seek(-3,2)
    msg=f.read(3)
    print(msg.decode('utf-8'))



with open('access.log',mode='rb') as f:
    f.seek(0,2) # 当前位置是147bytes

    while True:
        line=f.readline() # 当前位置是196bytes
        # print(f.tell())
        if len(line) == 0:
            # 没有新的一行内容追加进来
            pass
        else:
            # 有新的一行内容追加进来
            print(line.decode('utf-8'),end='')


with open('access.log',mode='rb') as f:
    f.seek(0,2) # 当前位置是147bytes

    while True:
        line=f.readline() # 当前位置是196bytes
        if len(line) != 0:
            print(line.decode('utf-8'),end='')

with open('a.txt',mode='r+t',encoding='utf-8') as f:
    f.truncate(6)

修改文件的方式一:

1 将文件内容由硬盘全部读入内存
2 在内存中完成修改
3 将内存中修改后的结果覆盖写回硬盘

with open('d.txt',mode='rt',encoding='utf-8') as f:
    all_data=f.read()

print(all_data,type(all_data))

with open('d.txt',mode='wt',encoding='utf-8') as f:
    f.write(all_data.replace('alex','dsb'))

错误的做法
with open('d.txt',mode='rt',encoding='utf-8') as f1,open('d.txt',mode='wt',encoding='utf-8') as f2:
all_data=f1.read()
f2.write(all_data.replace('dsb','alex'))

修改文件的方式二:

1 以读的方式打开源文件,以写的方式打开一个临时文件
2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕
3 删掉源文件,将临时文件重命名为源文件名
import os

with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f:
    for line in read_f:
        write_f.write(line.replace('alex','dsb'))

os.remove('d.txt')
os.rename('.d.txt.swap','d.txt')

方式一:
优点: 在文件修改的过程中硬盘上始终一份数据
缺点: 占用内存过多,不适用于大文件

方式二:
优点: 同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存
缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,

相关文章

  • Python-part7-文件

    1 什么是文件 文件是操作系统为用户/应用程序提供的一种操作硬盘的抽象单位 2 为何要用文件 用户/应用程序对文件...

  • wx - 学习笔记

    wxml 文件 wxs 文件 js 文件 wxml 文件 wxs 文件 js 文件

  • 文件操作/文件

  • ubuntu文件压缩与解压缩

    .tar 文件 .gz文件 .tar.gz文件、 .tgz文件 .zip文件 .rar文件

  • ubuntu常用命令和知识整理

    文件操作相关 sudo cp 文件 文件目录 //复制文件sudo mv 文件 文件目录 //移动文件su...

  • .dll文件、.lib文件、.h文件

    最基本的静态链接过程如图所示。每个模块的源代码文件(如.c)文件经过编译器编译成目标文件(Object File,...

  • Go文件IO操作 - 待完善

    FileInfo接口 文件路径 创建目录 创建文件 打开文件 删除文件 读取文件 写入文件 复制文件 ioutil...

  • Node内置模块——FileSystem

    文件操作 写入文件(覆盖式 / 追加式) 复制文件 读文件 删除文件 重命名/移动文件[夹] 文件夹操作 新建文件...

  • python 文件操作

    读写文件通常包含以下操作: 打开文件。获取文件对象 读写文件、对文件内容进行操作。 关闭文件。使用文件对象关闭文件...

  • Linux学习(五)——Linux文件系统

    Linux文件系统 文件系统和文件类型 文件类型 普通文件(-) 目录文件(d) 块设备文件(b) 字符设备文件(...

网友评论

      本文标题:Python-part7-文件

      本文链接:https://www.haomeiwen.com/subject/fpglbftx.html