如何使用python更改csv文件的分隔符,同时剥离新分隔符的字段



我收到了一个格式良好的csv文件,在包含逗号的文本字段周围有双引号。

遗憾的是,我需要将它加载到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, '|', ' '))

如何将其扩充为do b?

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

SQL Server可以加载您描述的文件类型。该文件当然可以用SSIS包加载,也可以用SQL Server bcp实用程序加载。编写python脚本将不是一条路(在不需要的时候将另一种技术引入到组合中……只是imho(。SQL Server能够准确地处理您想要做的事情。

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

SQL Server BCP导出SQL字段中逗号所在的位置

最新更新