[英]How can I use python to change the delimiter of a csv file while also stripping the fields of the new delimiter?
我收到了格式良好的csv文件,在包含逗号的文本字段周围用双引号引起来。
las,我需要将其加载到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。
SQL Server可以加载您描述的文件类型。 该文件肯定可以用SSIS包加载,也可以用SQL Server bcp实用程序加载。 编写python脚本不是要走的路(在不需要时将另一种技术引入混合中……只是恕我直言)。 SQL Server能够准确地处理您要执行的操作。
sis很简单。 对于BCP,您无需使用-t选项(为整个文件指定字段终止符),而应使用格式文件。 使用格式文件,您可以自定义每个字段终止符。 对于引用的字段,您将要使用自定义定界符。 请参阅本文或其他类似文章,其中详细介绍了如何使用带有分隔符和带引号的字段的BCP和文件来隐藏可能出现在数据中的分隔符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.