• 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)

    ---

  • 相关阅读:
    智能实验室-杀马(Defendio) 3.0.0.670 新春贺岁版
    智能实验室-全能优化(Guardio) 4.0.0.680 beta 9
    解密:骗人的所谓“开放六位 QQ 号码免费申请”
    智能实验室-全能优化(Guardio) 4.0.0.630 beta 3
    智能实验室-全能优化(Guardio) 4.0.0.650 beta 6
    智能实验室-杀马(Defendio) 3.0.0.651 beta 9
    智能实验室-杀马(Defendio) 3.0.0.632 beta 8
    智能实验室-全能优化(Guardio) 4.0.0.691 beta 11
    智能实验室-全能优化(Guardio) 4.0.0.620 beta 2
    智能实验室-全能优化(Guardio) 4.0.0.685 beta 10
  • 原文地址:https://www.cnblogs.com/xy-ouyang/p/13188189.html
Copyright © 2020-2023  润新知