栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

两个一一对应的txt文本去重

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

两个一一对应的txt文本去重

文章目录
  • 前言
  • 一、代码
    • 1. 保存到两个txt文件
    • 2. 保存到excel
  • 二、使用
  • 总结


前言

问题:对两个一一对应的txt文本文件进行去重操作,将结果保存
解决:pandas.concat & pandas.DataFrame.drop_duplicates

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
DataFrame.drop_duplicates(subset=None, keep='first', inplace=False, ignore_index=False)

一、代码 1. 保存到两个txt文件
def to2txt(file1_path,file2_path,file1,file2):
    """
    对两个一一对应的txt文本文件进行去重,分别写入两个文件
    :param file1_path: 文本1
    :param file2_path: 文本2
    :param file1: 输出文本1
    :param file2: 输出文本2
    :return: 
    """
    # read_csv读文件的时候,如果文本里包含英文双引号,直接读取会导致行数变少或是直接如下报错停止
    # Error tokenizing data. C error: EOF inside string starting at row 1
    zh_text = pd.read_csv(file1_path, header=None, sep='n', quoting=3,
                          error_bad_lines=False)  # 或者设置quoting=csv.QUOTE_NONE
    en_text = pd.read_csv(file2_path, header=None, sep='n', quoting=3,
                          error_bad_lines=False)  # 或者设置quoting=csv.QUOTE_NONE
    zh_en_text = pd.concat([zh_text, en_text], axis=1, keys=['zh', 'en'])  # 拼接
    zh_en_text.drop_duplicates(subset=None, keep='first', inplace=True)  # 去重
    zh = zh_en_text['zh']  # 取数据
    en = zh_en_text['en']  # 取数据
    assert len(zh) == len(en)
    zh.to_csv(file1, sep='n', index=False, header=False)  # 写入文本1
    en.to_csv(file2, sep='n', index=False, header=False)  # 写入文本2
2. 保存到excel
def to_excel(file1_path,file2_path,excel_file):
    """
    对两个一一对应的txt文本文件进行去重,对应写入excel
    :param file1_path: 文本1
    :param file2_path: 文本2
    :param file: excel文本路径
    :return: 去重后的excel文件
    """
    zh_text = pd.read_csv(file1_path, header=None, sep='n', quoting=csv.QUOTE_NONE,
                          error_bad_lines=False)
    en_text = pd.read_csv(file2_path, header=None, sep='n', quoting=csv.QUOTE_NONE,
                          error_bad_lines=False)
    zh_en_text = pd.concat([zh_text, en_text], axis=1)  # 拼接
    df = pd.DataFrame(zh_en_text.drop_duplicates())  # 去重
    # 写入excel
    writer = pd.ExcelWriter(excel_file, engine='xlsxwriter')
    df.to_excel(writer, sheet_name='test1', header=None, index=None)  # 不写入索引
    writer.save()
二、使用
if __name__ == "__main__":
    file1_path = "all_1.txt"  # 待处理文本1
    file2_path = "all_2.txt"  # 待处理文本2

    # file1 = "zh_test.txt"  # 处理后txt文本路径1
    # file2 = "en_test.txt"  # 处理后txt文本路径2
    # to2txt(file1_path,file2_path,file1,file2)  # 去重,分别写入两个文件

    excel_file = os.path.join(abspath, "result_files/drop_all.xlsx")  # excel文本路径
    to_excel(file1_path,file2_path,excel_file)  # 去重,对应写入excel

总结
  1. 总体思路:将文本读取为DataFrame,对DataFrame结构的数据进行一系列操作,包括拼接、去重、写入文件
  2. 注意:read_csv在读文件的时候,如果文本里包含英文双引号,直接读取会导致行数变少或是直接如下报错停止
Error tokenizing data. C error: EOF inside string starting at row 1

解决方法:设置参数quoting

pd.read_csv(file_path, quoting=3) 
pd.read_csv(file_path, quoting=csv.QUOTE_NONE) 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/843952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号