zoukankan      html  css  js  c++  java
  • SQL Management Studio导出表为 txt,两条记录变成一行

    1、现象描述

      背景描述:SQL Management Studio导出表为 sl_topup.txt后,文本格式为 GBK,使用 python 脚本将 GBK 转成 UTF-8。由于文件太大,内存不够,使用 TXTkiller.exe 拆分 sl_topup.txt 为100 个文件(按行拆分)。

       使用 COPY 指令将 txt 导入到 postgresql报错:

      使用 ";" 作为导出分隔符  重复测试:

       打开 sl_topup_094.txt(转成 utf-8),在 230871 行出现两条记录合并成了一行

       sl_topup_094(gbk编码)同样,所以应该不是python 脚本转 UTF-8 造成的。

    2、解决

      python 脚本处理

    import os
        
    def list_folders_files(path):
        """
        返回 "文件夹" 和 "文件" 名字
        :param path: "文件夹"和"文件"所在的路径
        :return:  (list_folders, list_files)
                :list_folders: 文件夹
                :list_files: 文件
        """
        list_folders = []
        list_files = []
        for file in os.listdir(path):
            file_path = os.path.join(path, file)
            if os.path.isdir(file_path):
                list_folders.append(file)
            else:
                list_files.append(file)
        return (list_folders, list_files)
        
    def convert(filePath, default_length, outfile):
        file = open(filePath, encoding='utf-8')
        for line in file: 
            line_len = len(line.split(','))
            if (line_len != default_length):
                print('字段数:{0}'.format(line_len))
                print('待处理的字符串:{0}'.format(line))
                list = line.split(',')
                record1_id = list[0]
                record2_id = int(record1_id) + 1
                line_index = line.index(str(record2_id))
                # print(line[0:line_index])
                line = line[0:line_index] + "
    " + line[line_index:-1] + '
    '
                print('处理后的字符串:{0}'.format(line))
            
            outfile.write(bytes(line, encoding="utf8"))
    
        print(filePath.split('\')[-1] + '读取完毕')
    
    # 将路径下面的所有文件,如果一行中有两行记录的,处理成两行
    if __name__ == "__main__":
        base_path = 'C:\Users\oy\Desktop\test\data'
        (list_folders, list_files) = list_folders_files(base_path)
        print('所有需要处理的文件:{0}'.format(list_files))
        
        for fileName in list_files:
            filePath = base_path + '\' + fileName
            default_length = 16 # 默认字段数(使用','切割字符串后得到16份)
            outfile = open(base_path + '\out_' + fileName, "wb")
            convert(filePath, default_length, outfile)

    ---

  • 相关阅读:
    [kuangbin带你飞]专题十二 基础DP1 E
    hdu 1203 I NEED A OFFER! (01背包)
    hdu 2602 Bone Collector (01背包)
    hdu 4513 吉哥系列故事——完美队形II (manacher)
    hdu 2203 亲和串 (KMP)
    hdu 1686 Oulipo (KMP)
    hdu 1251 统计难题 (字典树)
    hdu 2846 Repository (字典树)
    hdu 1711 Number Sequence (KMP)
    poj 3461 Oulipo(KMP)
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/13188189.html
Copyright © 2011-2022 走看看