python高效去掉json最后个一字符

需求:

把.json文件最后一行空行符“\n”给删掉。因为其log.json的特殊性,最后一行为'}\n'不能用一行行读并重写文件的方法删除,故尝试如下方法,成功实现我的需求。

在网上找了好多方法,感觉都是基于重写的原理,低效且尝试过并不管用。

利用字节的读法来删除最后一个字符

代码如下:

import os

def delLastLine(file1_path):
    """删除文件最后一个字符"""
    file_old = open(file1_path, 'rb+')

    # 定位倒数第n个字符
    file_old.seek(-1, os.SEEK_END)

    # 截断之后的数据
    file_old.truncate()

    file_old.close()

扩展:

若需要像这种方法,高效的删除最后1行/最后N行数据,可以尝试如下方法:

import os

# 在文本文件中,若没有使用b模式选项打开的文件,只允许从文件头开始计算相对位置,从文件尾计算时就会引发异常
file_old = open('D:/EEG/LXP/FRAG1/FZ_H_ch5.txt', 'rb+')
m = 15

# 1.定位文件末尾的前m个字符的位置,大小可根据每一行的字符数量修改,为一估计值,但不能超过文件总字符数
# 若要删除最后一行,要确保m比最后一行的字符数大
# 若要删除后N行,要确保后N行的总字符数比m小
# 若文件很小或无法大体估计每一行的字符数,可以删除这行代码
file_old.seek(-m, os.SEEK_END)	 

# 2.从步骤1定位的位置开始读取接下来的每一行数据,若步骤1的代码删除,则会从文件头部开始读取所有行
lines = file_old.readlines()	

# 3.定位到最后一行的行首,若要删除后N行,将lines[-1]改为lines[-N:]即可
file_old.seek(-len(lines[-1]), os.SEEK_END)	

file_old.truncate()  # 截断之后的数据 

file_old.close()

posted @ 2021-07-28 10:28  poowicat  阅读(695)  评论(0编辑  收藏  举报