python 05.28

1.什么是文件

文件是操作系统提供的虚拟的单位,有了文件我们可以读取数据,没有文件的话应该去硬盘上扣动机械手臂然后寻找数据。

2.如何使用文件

①打开文件

②读写数据

③保存

④关闭文件

read:一次性读取所有数据

readline:读取一行,如果读完了所有数据,就读取则为空。

fr = open(r'C:\Users\Administrator\Desktop\pyton文件.txt',encoding='gbk')
# 相当于你打开的文件
print(fr.read())  # 一次性读取所有的内容
del fr  # 只删除了变量名,但是文件对于操作系统来讲,还是打开状态的
fr.close()  # 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的
fw = open(r'C:\Users\Administrator\Desktop\pyton文件.txt',encoding='gbk')  # 相当于你打开的文件
print(fw.write('Calvin'))  # 写入内容, 清空文件后写入
fw.close()  # 不仅删除了变量名f,并且也关闭了文件,这个时候文件对于操作系统来讲是关闭状态的

3.绝对路径和相对路径

绝对路径:从根目录开始,一直到你需要的文件路径

相对路径:从当前文件夹开始,到你需要的文件路径,要打开的文件必须和运行的py文件必须在同一个文件夹中

4.文件三种打开方式

mode='r'只读

mode='w'只写,清空文件再写入

mode=‘a'追加

rt:打开txt文本

fr = open(r'C:\Users\Administrator\Desktop\pyton文件.txt', mode='rt', encoding='gbk')  # 默认r=rt
text_data = fr.read()
print(text_data)

rb:打开的bytes类型,二进制

r,r告诉你接下来的字符串,里面所有的特殊字符都变得没有意义

b表示,你写的字符串为二进制,在打印的时候不需要终端编码处理,直接输出原生的二进制编码即可。

t&b不能单独使用,必须得和r/w/a一起使用

r/w/a可单独使用

4.with管理上下文

with open(文件路径,打开模式(rt/wt/at/rb/wb/ab),编码格式) as 变量名

​ 变量名:read/write

with open(r'C:\Users\Administrator\Desktop\pyton文件.txt',mode='r',encoding='utf8') as fr:
    data=fr.read()
    print(data)

5.文件的高级应用

r只读/w只写/a追加,可读可写(不推荐使用r+,w+,a+*

with open(r'C:\Users\Administrator\Desktop\pyton文件.txt',mode='r',encoding='utf8') as fr:
    print(fr.readable())
    print(fr.writable())
    data=fr.readline()
    print=(data)
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt', 'w', encoding='utf8') as fw:
print(fw.readable())
print(fw.writable())
fw.write('nick handsome')
fw.flush()
with open(r'C:\Users\Administrator\Desktop\pyton文件.txt','r+',encoding='utf8') as fr:
print(fr.readable())
print(fr.writable())
data = fr.readline()
fr.write('nick handsome245234234')
fr.flush()

文件的写入没有插入一说,只有覆盖

指针(不要使用指针)

with open(r'C:\Users\Administrator\Desktop\pyton文件.txt','rt+',encoding='utf8') as fa:
    fa.readline()
    fa.seek(5, 0)  # 字节算的
    fa.seek(3, 1)
    print(fa.tell())  # 告诉你光标当前的位置
    print(fa.read(3))  # 光标后的字符个数,一个中文1个字符,3个字节;一个英文一个字符,一个字节
    fa.truncate(3) # 如果它有参数,则光标会跳到指定字节数后,然后把后面的文件全部清空
    fa.flush()

6.文件的拷贝

文件不能插入,但是有需求要修改文件,插入。

with open('test.txt', 'r',encoding='utf8') as fr:
    print(fr.readlines())
for i in fr.readlines():
    print(i)
    print('*'*50)
    for i in fr:   # 这样获取更省内存
        print(i)
        print(fr)

# 减少了内存的占用
with open('test.txt', 'r', encoding='utf8') as fr, \
        open('test_swap.txt', 'w', encoding='utf8') as fw:  # w在清空文件,而不是write清空文件
    '''
    tank dsb

    tank dsb

    tank dsb

    tank dsb
    '''
    for i in fr:
        i = i.replace('sb', '帅逼')
        fw.write(i)

import os

os.remove('test.txt')
os.rename('test_swap.txt', 'test.txt')
posted @ 2019-05-28 19:32  海森t  阅读(37)  评论(0)    收藏  举报