我收到格式正确的csv文件,在包含逗号的文本字段两边加上双引号。
A,我需要将其加载到SQL Server中,据我所知(请告诉我这里的问题),该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。
答案 0 :(得分:1)
SQL Server可以加载您描述的文件类型。该文件肯定可以用SSIS包加载,也可以用SQL Server bcp实用程序加载。编写python脚本不是要走的路(在不需要时将另一种技术引入混合中……只是恕我直言)。 SQL Server能够准确地处理您要执行的操作。
ssis非常简单。 对于BCP,您无需使用-t选项(为整个文件指定字段终止符),而应使用格式文件。使用格式文件,您可以自定义每个字段终止符。对于引用的字段,您将要使用自定义定界符。请参阅本文或其他类似文章,其中详细介绍了如何使用BCP和带有定界符和带引号的字段的文件来隐藏可能出现在数据中的定界符。