python基础|文件操作

文件操作 

  文件是操作系统提供给用户操作复杂硬件的载体。开发者/管理员,应用程序需要永久保存数据,就需要文件这种载体。在python中操作文件有两种方式

方式一

f = open(r'文件路径')      # 向操作系统发送请求,读取文件
print(f)                    # f是文件对象
print(f.read())           # 打印读出的内容 window操作系统默认以gbk模式解码数据
f.close()                    # 关闭文件

  文件路径有两种,一种是绝对路径,如:D:pycharmEducation课程python基础4,文件操作a.txt。这就是一种绝对路径,告诉系统文件在哪里。另一种便是相对路径,如:a.txt。这是相对路径。相对路径有要求,必须在运行文件操作程序同级文件夹下,下级文件和上级文件夹下都无法读取。此为,在文件前加‘r'告诉系统这是文件路径,其中 ,都是文件路径格式,没有其他任何意义。当然不闲麻烦还可以:D://pycharm/Education/课程/python基础4,文件操作a.txt。还可以这种方式写文件路径。

  在这种模式下读取完文件后,一定要关闭一下读取文件操作。f.close(),如果我们不关闭文件,那么系统不会立即关闭读取文件的请求,这样会占用系统的资源。

方式二

  上下文操作。

with open(r'文件路径‘) as f:
# 或者
with open(r'文件路径’)as f, open(r'文件路径‘)as f1:
同时打开多个文件
    

  这种方式下打开文件,当我们回车写指令对文件操作。指令缩进,所有的程序指令就这这个文件操作的子代码块。如果想要关闭。就和这with对齐,成为同级代码,python程序就会关闭对这个文件系统请求操作。

  对于文件操作的模式有三种:1,'r'只读模式,'w'只写模式,'a'追加写模式。操作文件单位的有两种方式。t文本文件方式;b二进制文件方式。二进制文件方式视频,图片等我们都可以用这种模式。

文件操作"with open(r'文件路径', mode = 'rt', encoding = 'utf-8')“,其中”mode=' ' ”就是操作模式的选择,encoding = '' 就是以什么格式经行解码。在mode 位置也可以不写mode = ''  ,直接写’r',python默认是t文本文件。

  在'r'只读模式下,如果文件不存在,系统会报错。读文件,当文件内容读完后,在进行读操作只能读到空白。

# 只读模式下的内置操作
f.readable()    # 判读是否可读
f.read()        # 读取信息
f.readline()    # 对文件单行数据读取
f.readlines()  # 读取文件所有行

  在'w‘只写模式下,如果文件不存在,那么将会自动创建以该名命名的一个文件。写文件时,写的信息会覆盖原来的信息,是原来的信息会丢失。

# 只读模式的内置操作
f.writable()    # 判读是否可写
f.write()       # 写数据到文件
f.writelines()    # 对文件单行数据读取

  在'a‘追加写模式下,不会覆盖原来的数据,在文本文件信息末尾出追加,进行写操作。

在这三种模式下还有可读可写模式'r+t', 'w+t' 和 'a+t’模式。

        在读模式下,使用f.read(1),在内置函数read()内可以放置int型参数。这个参数表读取位置的参数。在'rt‘模式下,存入的方式是以'utf-8',我们可以读取文本文件的第1个汉字或字母。这就是实现对文件的选择性读取了。

# a.txt文件内容
商品      价格
mac       8600
iphone    8900
联想电脑  5200
玩具      364
# 文件的第一字是商
# py文件读程序
with open(r'a.txt', 'rt', encoding='utf-8') as f:
    rec = f.read(1)     # 读取第一个字  
    print(rec)
>>># 当read()参数改为2时
>>>商品

  选择型读取还有以seek()的内置函数需要了解。写f.seek(),我们使用ctrl键鼠标放在seek上发现这里需要放置两个参数f.seek(offset, whence)。offset代表的是指针移动的字节数,whence是代表参照什么位置移动的。当whence = 0,表示在文件开头,并且在t和b模式下都可以使用。whence = 1,表示参照当前所在位置,必须在b模式下使用。whence = 2 ,表示参照末尾,也必须在b模式下使用。

  

# a.txt文档,在gbk模式下存入的
meKing在学习还是在把妹
# py文件
with open(r'a.txt', 'rb') as f:
    f.seek(6, 1)       # 在第六个Btes开始,每个英文字母占1Btes,中文字符占用2Btes
    rec = f.read(2).decode('gbk')   # 读取2Btes,用gbk编码解码
    print(rec)
>>>在

  whence=2时,的读取位置将在末尾。利用此功能可以做一文件检测的功能

# py写文件
import time
A = time.strftime('%Y-%m-%d %X')
print(A)
with open(r'b.txt', 'a', encoding='utf-8') as f:
    f.write('%s  meKing在学习
'%A)

# 检测文件是否写入
with open(r'b.txt', 'rb') as f:
    f.seek(0, 2)        # whence = 2模式。光标位置在b文件末尾
    while True:
        s = f.readline()    # 读取从之前末尾读往后一行
        if s:           # 如果有写入,便可以读取内容
            print(f.tell())    # tell(),查光标位置
            print("新增的文件内容:%s" % s.decode('utf-8'))

  文件修改的两种方式

'''
方式一
1,先把原文件内容读出 2 ,对文件内容经行更改 3,把更改好的新内容写入,覆盖原文件 ''' with open(r'a.txt','r',encoding='utf-8') as f: a = f.read() # print(a) b = a.replace('女朋友', '玩具') # print(b) with open(r'a.txt', 'w', encoding='utf-8') as f1: f1.write(b) print('over')
'''
方式二
1,同时操作两个文件
2,将原文件的内容逐行读出经行修改,写入新文件内
3,完成后,删除原文件,将新文件名改成原文件名
'''
import os
with open(r'a.txt', 'r', encoding='utf-8') as read_f,
        open(r'a1.txt', 'a', encoding='utf-8') as writre_f:   #原文件读,新文件写操作
    a = read_f.read()
    a = a.replace('女朋友', '玩具')  # 修改文件内容
    for line in a:
        new_line = line
        writre_f.write(new_line)   # 逐行写入新文件
os.remove(r'a.txt')     # 删除原文件   
os.replace('a1.txt', 'a.txt')    # 偷梁换柱,改成原文件名字

 

原文地址:https://www.cnblogs.com/huaiXin/p/11143391.html