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)

---

原文地址:https://www.cnblogs.com/xy-ouyang/p/13188189.html