【发布时间】:2019-07-04 20:17:15
【问题描述】:
我有一个 SSIS 循环包,它多次调用 python 脚本。
意图:
有一个 csv 文件的文件夹。我需要将它们转换为以竖线分隔的文本文件。一些文件中有错误的行。 python 脚本将 csv 文件转换为管道文件,同时删除不良记录。
python代码:
import csv
import sys
if len(sys.argv) != 4:
print(sys.argv)
sys.exit("usage: python csvtopipe.py <<SOURCE.csv>> <<TARGET.txt>> <<number of columns>>")
source = sys.argv[1]
target = sys.argv[2]
colcount = sys.argv[3]
file_comma = open(source, "r", encoding="unicode_escape")
reader_comma = csv.reader(file_comma, delimiter=',')
file_pipe = open(target, 'w', encoding="utf-8")
writer_pipe = csv.writer(file_pipe, delimiter='|', lineterminator='\n')
for row in reader_comma:
if len(row) == int(colcount):
print("write this..")
writer_pipe.writerow(row)
file_pipe.close()
file_comma.close()
SSIS 包:
来自 SSIS 的 python 调用:
python csvtopipe.py <<SOURCE.csv>> <<TARGET.txt>> <<number of columns>>
问题。
循环正常工作,但是当单个调用完成时,文件会重新写入 0 字节。我不知道这是 SSIS 问题还是 python 问题。
谢谢!
更新 1
这是代码的原始版本。结果相同:
import csv
import sys
if len(sys.argv) != 4:
print(sys.argv)
sys.exit("usage: python csvtopipe.py <<SOURCE.csv>> <<TARGET.txt>> <<number of columns>>")
source = sys.argv[1]
target = sys.argv[2]
colcount = sys.argv[3]
with open(source, "r", encoding="unicode_escape") as file_comma:
reader_comma = csv.reader(file_comma, delimiter=',')
with open(target, 'w', encoding="utf-8") as file_pipe:
writer_pipe = csv.writer(file_pipe, delimiter='|', lineterminator='\n')
for row in reader_comma:
if len(row) == int(colcount):
print("write")
writer_pipe.writerow(row)
【问题讨论】:
-
我建议您更新以使用
with open(......) as ...而不是单独的open()和close()。如果出现问题,这将确保文件被关闭。 -
谢谢马丁。我确实先尝试过。结果相同。我在主要问题中添加了该代码。也许它会为你打开一些东西。我很感激。
-
我假设您在输出中看到
write。您可以在退出前显示文件大小(参见os.path.getsize()) -
我看到在标准输出中写入。这是发现问题的第一个迹象。
-
尝试将时间戳附加到输出文件名