【问题标题】:How can I use python to change the delimiter of a csv file while also stripping the fields of the new delimiter?如何使用 python 更改 csv 文件的分隔符,同时剥离新分隔符的字段?
【发布时间】:2019-04-05 05:49:45
【问题描述】:

我收到一个格式正确的 csv 文件,其中包含逗号的文本字段周围有双引号。

唉,我需要将它加载到 SQL Server 中,据我所知(请告诉我这里的错误)无法处理包含分隔符的引号括起来的字段。

所以,我想编写一个 python 脚本,它将 a) 将文件转换为管道分隔,b) 删除字段中存在的任何管道(我的感觉是逗号更常见,所以我想为了保存它们,另外我还有一些数字字段,至少在将来可能包含逗号)。

这是我必须做的代码:

import csv
import sys

source_file=sys.argv[1]
good_file=sys.argv[2]
bad_file=sys.argv[3]

with open(source_file, 'r') as csv_file:
    csv_reader = csv.DictReader(csv_file)

    with open(good_file, 'w') as new_file:
            csv_writer = csv.DictWriter(new_file, csv_reader.fieldnames, delimiter='|')
            headers = dict( (n,n) for n in csv_reader.fieldnames)
            csv_writer.writerow(headers)
            for line in csv_reader:
                    csv_writer.writerow(str.replace(line, '|', ' '))

我怎样才能增强它来做 b?

ps--我使用的是 python 2.6,IIRC。

【问题讨论】:

  • 您能否将源 CSV 中的几行添加到您的问题中并显示您的预期输出?

标签: python sql-server csv import bcp


【解决方案1】:

SQL Server 可以加载您描述的文件类型。该文件当然可以使用 SSIS 包加载,也可以使用 SQL Server bcp 实用程序加载。编写python脚本不是要走的路(在不需要时将另一种技术引入混合......只是恕我直言)。 SQL Server 能够准确地处理您想要做的事情。

ssis 非常简单。 对于 BCP,您不需要使用 -t 选项(为整个文件指定字段终止符),而是使用格式文件。使用格式文件,您可以自定义每个字段终止符。对于引用的字段,您需要使用自定义分隔符。请参阅这篇文章或其他类似文章,详细了解如何使用 BCP 以及带有分隔符和引用字段的文件来隐藏数据中可能出现的分隔符。

SQL Server BCP Export where comma in SQL field

【讨论】:

    猜你喜欢
    • 2011-06-16
    • 2011-08-27
    • 2020-07-06
    • 2020-11-25
    • 2015-11-01
    • 2017-12-28
    • 2021-12-17
    • 2015-10-12
    相关资源
    最近更新 更多