先了解Python splitlines()用法

str.splitlines([keepends])
按照行('\r', '\r\n', \n')分隔,返回一个包含各行作为元素的列表,参数 keepends默认为 False,不保留换行符,如果为 True,则保留换行符。在处理中,建议默认不保留,在写入的时候在定义换行符。

json涉及字符串与字典的转换,需一行一行写入,txt可利用file.writelines(list)进行整体写入

import json
# f11(json文件),f22(txt文件)为原文件,f.f2为新写入文件
with open(casefile_path2, 'a+', newline='', encoding='utf-8') as f, \
        open(casefile_path, 'r', encoding='utf-8') as f11:
    # casefile为json文本,去重写入
    casetmp = f11.read().splitlines()
    print("casetmp", type(casetmp))# <class 'list'>
    casetmp1 = list(set(casetmp))  # 利用内置集合去重
    casetmp1.sort(key=casetmp.index) #排序
    for each in casetmp1:
        case = json.loads(each)
        json.dump(case, f, sort_keys=True, ensure_ascii=False)
        f.write("\n")
with  open(factfile_path2, 'a+', newline='', encoding='utf-8') as f2, \
        open(factfile_path, 'r', encoding='utf-8') as f22:
    # factfile为txt ,去重写入
    facttmp = f22.read().splitlines()
    print("facttmp", type(facttmp)) #  <class 'list'>
    facttmp1 = list(set(facttmp))  # 利用内置set去重
    facttmp1.sort(key=facttmp.index)
    fact_article = [tmp + "\n" for tmp in facttmp1]
    # 给每一行的结尾加一个换行符
    f2.writelines(fact_article)

简化txt代码

with open('a.txt') as file1:
  tmp_list = file1.read().splitlines()
  tmp_new = set(tmp)#利用内置的集合去重
  tmp_only = [tmp + "\n" for tmp in tmpnew]#给每一行结尾加换行符
with open('b.txt', 'w') as file2:
  file2.writelines(tmp_only)

 (这种.splitlines()方法需要注意,txt文本如果不规范,每一行以“\n”为换行符,但是一行内间含有“\n”特殊字符,这种文本就不适用,使用的结果是文本去重后,行数也许不减反降,这是因为它把文件中本是一行的数据拆分了,用这种方法的首先考虑自己的文件格式,其次可以用下面的程序“查看文件行数长度”进行检验)

去除重复行(法二:建造list或set检查是否已存在)

如果考虑到文本的长度是否会超出显示,可以截取单行前多少字符,进行比较,比如我的数据有唯一的标识符id,我就对唯一的进行比较,而不是整行进行比较,如果不考虑文本长度问题就可以直接添加进list或set判断。

import json
with open(casefile_path2, 'a+',  newline='',encoding='utf-8') as f,\
        open(factfile_path2, 'a+', newline='',  encoding='utf-8') as f2, \
        open(casefile_path, 'r', encoding='utf-8') as f11,\
        open(factfile_path, 'r',  encoding='utf-8') as f22,
    lines_seen = set()
    for line in f11:
        case = json.loads(line)
        id = case["ID"]
        if id not in lines_seen:
            lines_seen.add(id)
            case = json.loads(line)
            json.dump(case, f, sort_keys=True, ensure_ascii=False)
            f.write('\n')
            fact_article = f22.readline()
            f2.write(fact_article)

简化代码:

read_Path='a.txt'
write_Path='b.txt'
lines_seen=set()
outfiile=open(write_Path,'a+',encoding='utf-8')
f=open(read_Path,'r',encoding='utf-8')
for line in f:
    if line not in lines_seen:
        outfiile.write(line)
        lines_seen.add(line)

按行写入json/txt文件

def save_data(case,fact_article):
    数据存储逻辑
    global factfile_path
    global casefile_path
    with open(casefile_path, 'a+', encoding='utf-8') as f:
        #case为一个字典
        json.dump(case, f, sort_keys=True, ensure_ascii=False)
        f.write('\n')
    with open(factfile_path, 'a+', newline='', encoding='utf-8') as f2:
        #fact_article为一个字符串
        f2.write(fact_article)
        f2.write('\n')

同时写入文件,将f11文件追加写入f。两个文件同步写入。json文件比较特殊需要一行一行进行。

with open(casefile_path, 'a+',  newline='',encoding='utf-8') as f,\
        open(factfile_path, 'a+', newline='',  encoding='utf-8') as f2, \
        open(casefile_path2, 'r', encoding='utf-8') as f11,\
        open(factfile_path2, 'r',  encoding='utf-8') as f22:
    # print(type(f11))#<class '_io.TextIOWrapper'>
    for line in f11:
        case = json.loads(line) #line是str,case是字典
        json.dump(case, f, sort_keys=True, ensure_ascii=False)
        f.write('\n')  #行末需要写入"\n"
        fact_article = f22.readline()
        f2.write(fact_article)
        # f2.write('\n')#因为这一行文本,行末本就有"\n",所以不需要加换行

查看文件行数长度

def zhuijia(factfile_path):
    # filename = "somefile.txt"
    factfile = open(factfile_path, encoding='utf-8')
    factfile_lines = len(factfile.readlines())
    print( factfile_lines )
    factfile.close()
目录去除重复行(法一:利用内置set)去除重复行(法二:建造list或set检查是否已存在)按行写入json/txt文件查看文件行数长度factfile_path  为json文件casefile_path 为txt文件去除重复行(法一:利用内置set)先了解Python splitlines()用法str.splitlines([keepends])按照行...
工作时经常会用到python处理json格式的数据, 通常json.loads之后主要的数据通常是 list 里面包含很多的dict 直接用list(set()) 这种方式去重会报错 TypeError: unhashable type: 'dict' 所以自己写一个判断重复的方法 def removeduplicate(list1): 列表套字典去重复 :param list1: 输入一个有重复值的列表 :return: 返回一个去掉重复的列表
可以使用 Python 的 set 类型来实现这个功能。 首先,需要打开文件并读取所有,然后将每数据添加到一个 set 中。set 会自动去除重复的数据,所以最后得到的 set 就是去重后的数据。最后,可以将 set 中的数据写回到文件中。 以下是一个例子: # 打开文件并读取所有 with open('data.txt', 'r') as f: lines = f.readline...
df = pd.read_csv(file_in) df = df.drop_duplicates(subset=None, keep='first', inplace=False) # df.to_csv(file_out,index = False) subset: 列标签,可选 keep: {‘first’, ‘last’, False}, 默认值 ‘first’ first: 保留第一次出现的重复项。 last: 删除
1.前言:         采用python中set()的概念,通过遍历原始文档中的元素,并将其添加到set()中,然后根据set()的性质来判断新的元素是否要被添加到新的文档中去。最终生成的新的文档即满足所需。 2.代码实现: #coding:utf-8 readDir = "./original_file.txt" writeDir = "./new_file.txt" outfil...
Python字典的键是不允许重复的,json字典的键可以重复,如果要用Python构建一个键重复json字符串该怎么处理好呢 我只想到了两个较简单的方法来达到这个目的 把有重复键值的部分先用一个特殊字符串标记,然后构造出有键重复json字符串,然后替换进去 import json json_data = {"params": "XXX"} params_str = '{"key": "...
var tbdt = JSON.stringify(Data);//把JSON1转为字符串Data为需要在原有JSON上添加的JSON var hvz;//localStorage.getItem("lstk")用于保存原有JSON字符串 int main() { ifstream inputFile("E:/OneDrive/桌面/dian/wu1.txt"); vector<pair<int, int>> coordinates; if (inputFile.is_open()) { string line; while (getline(inputFile, line)) { int x, y; sscanf(line.c_str(), "(%d,%d)", &x, &y); coordinates.push_back(make_pair(x, y)); inputFile.close(); } else { cout << "文件打开失败!" << endl; return 1; for (auto& p : coordinates) { cout << "(" << p.first << "," << p.second << ")" << endl; return 0; 在这个示例代码中,我们使用 `ifstream` 类型的对象 `inputFile` 打开了文件 `E:/OneDrive/桌面/dian/wu1.txt`。然后,我们按照前面的示例代码,读取文件中的坐标数据,并将它们存储到一个 vector 容器中。最后,我们输出 vector 容器中的所有坐标数据。 需要注意的是,如果文件打开失败,我们需要输出一条错误信息并返回一个非零值,以便通知调用者发生了错误。