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


前言

问题:对两个一一对应的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) 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值