6.文件基本操作

文件操作模式

打开文件的两种方式

f = open('a.txt', mode='rt', encoding='utf-8')
''' f是文件的对象,括号内的第一个对象是文件的地址,可以是相对地址,也可以是绝对地址;
中间的对象是你选择要执行的模式,如果你只写主模式(纯净模式),默认从模式为t模式即文本模式,中间的mode可以省略;
第三个是编码格式一般用utf-8,在t模式下,必须标明编码格式,b模式下一定不要标明编码格式
'''
f.read()
f.close()  # 这里只是关闭了文件,并没有回收对象的资源
print(f)  # 结果为<_io.TextIOWrapper name='a.txt' mode='rt' encoding='utf-8'>
方式一
with open('a.txt', mode='rt', encoding='utf-8') as f:
    ''' f是文件的对象,括号内的第一个对象是文件的地址,可以是相对地址,也可以是绝对地址;
    中间的对象是你选择要执行的模式,如果你只写主模式(纯净模式),默认从模式为t模式即文本模式,中间的mode可以省略;
    第三个是编码格式一般用utf-8,在t模式下,必须标明编码格式,b模式下一定不要标明编码格式;
    它会自动关闭文件,不需要手动书写代码
    '''
    f.read()

print(f)  # 结果为<_io.TextIOWrapper name='a.txt' mode='rt' encoding='utf-8'>
方式二

 

with open('a.txt', mode='rt', encoding='utf-8') as f,open('b.txt', mode='rt', encoding='utf-8') as f1:
    pass
多文件打开方式

读写文件

文件内容

床前明月光,疑是地上霜
举头望明月,低头思故乡

1.read()

读取文件所有内容,当文件不存在时,报错

read内可以有参数,且参数为数字。在rt模式下,数字代表的是字符,除次之外,数字代表的是字节

f = open(r'libai',encoding = 'utf-8')
print(f.read())

床前明月光,疑是地上霜
举头望明月,低头思故乡

2.readline()

只读取一行内容,若文件不存在则报错

f = open('libai',encoding = 'utf-8')

print(f.readline())

床前明月光,疑是地上霜

3.readlines()

把文章内容以换行符分割,并生成list格式(数据量大的时候不建议用)

f = open('libai',encoding = 'utf-8')

print(f.readlines())

['床前明月光,疑是地上霜\n', '举头望明月,低头思故乡']

4.二进制读取“rb”

复制代码
#rb  二进制模式读取
f = open('libai','rb')  #主要用于网络传输
print(f.readline())

b'\xe5\xba\x8a\xe5\x89\x8d\xe6\x98\x8e\xe6\x9c\x88\xe5\x85\x89\xef\xbc\x8c\xe7\x96\x91\xe6\x98\xaf\xe5\x9c\xb0\xe4\xb8\x8a\xe9\x9c\x9c\r\n'

 

5.二进制写“wb”

f = open('libai','wb')
f.write('中文'.encode())    

flush,tell,truncate和游标操作

1.flush

将内存中文件刷新到硬盘中

2.tell

查看当前光标移动多少字节

3.truncate

截断文件内容

4.游标

f.seek(offset,whence)
offset:相对偏移量 光标移动的位数(默认是从左往右,偏移量是字节个数,中文在utf-8内是三个字节,英文是一个字节)
whence:
    0:参照文件的开头   t和b都可以使用,在rt+或r+b模式下,如果游标不在末尾,将从游标的位置后进行覆盖
如果游标在末尾,则进行添加操作
    1:参照光标所在的当前位置  只能在b模式下用。r+b模式下,如果游标不在末尾,将从游标的位置后进行覆盖如果游标在末尾,则进行添加操作
    2:参照文件的末尾只能在b模式下使用

文件修改的两种方式

'''文件修改
逻辑思维1:1. 把文件从硬盘读到内存中(即打开文件)
          2. 将文件内容一次性全部读取出来,赋值给data变量
          3. 对data变量进行修改操作
          4. 打开文件,将被修该好的变量写入到文件中(即将文件保存到硬盘中。     
'''
with open('a.txt', 'r', encoding='utf-8') as f:
    data = f.read()
    data = data.replace('is', 'shji')
with open('a.txt', 'r', encoding='utf-8') as f:
    f.write(data)
'''
文件的拷贝
          1.  把文件从硬盘读到内存中(即打开文件),同时新建另一个文件b.txt.
          2.  一行一行读取文件并将文件追加到新文件中。
          3.  删除老文件,并将新文件重新命名

'''
import os

with open('a.txt', 'r', encoding='utf-8') as f, open('b.txt', 'a', encoding='utf-8') as f1:
    for line in f:
        f1.write(line)
os.remove('a.txt')
os.rename('b.txt', 'a.txt')
'''文件的修改
逻辑思维2:1.  把文件从硬盘读到内存中(即打开文件),同时新建另一个文件b.txt.
          2.  一行一行读取文件并将修改后的文件内容追加到新文件中。
          3.  删除老文件,并将新文件重新命名'''
import os

with open('a.txt', 'r', encoding='utf-8') as f, open('b.txt', 'a', encoding='utf-8') as f1:
    for line in f:
        line = line.replace('is', 'shji')
        f1.write(line)
os.remove('a.txt')
os.rename('b.txt', 'a.txt')
文件修改和拷贝

 编码转换

 方法

 

posted @ 2019-06-26 22:02  ليو  阅读(202)  评论(0编辑  收藏  举报