繁体   English   中英

使用python解析输入csv文件以获取输出sql文件

[英]parse an input csv file with python to get an output sql file

基本上我在Python 3.2中要做的是读取包含3列的输入csv文件,然后创建一个sql输出文件,其中输入文件中每行的3个数据将作为插入查询中的参数:

我的代码看起来像这样:

import os  
import csv  

InFileName = r'path\test.csv'  
OutFileName = r'path\test.sql'  
NumCommas = 0  

File = open(InFileName)  
for line in File:  
    if line.count(',') > NumCommas:  
        NumCommas = line.count(',')  
File.seek(0)  

reader = csv.reader(File)  
OutFile = open(OutFileName, 'w')  
for rows in reader:  
    OutFile.write("insert into table_name values(",rows[0],", 2, to_date(",   rows[1],",'YYYY-MM-DD'), 1, 1, -1, 0, ",rows[2],", ",rows[2],", 0, 0, 0, sysdate, 0);" +   '\n')  

OutFile.close()  
File.close()  

我收到了错误:

列表索引超出范围

rows in reader块中记录rows内的rows in reader 您可能只是在csv的文件(或开头)末尾有一个空行。

这意味着该rows数组将为空, rows[0]rows[2]位可能会尝试访问该行不存在的列:

for rows in reader:
    print rows # check yourself before you wreck yourself

用你的代码

NumCommas = 0  

File = open(InFileName)  
for line in File:  
    if line.count(',') > NumCommas:  
        NumCommas = line.count(',')

您确定并记住输入文件的所有行的一行中的最大逗号数。 之后您甚至没有使用该信息来验证您的输入。

杰克已经说明了一点:验证您的输入:

for (lineno, row) in enumerate(reader):
    if len(row) >= 3:
        OutFile.write("insert into table_name values(",row[0],", 2, to_date(",   row[1],",'YYYY-MM-DD'), 1, 1, -1, 0, ",row[2],", ",row[2],", 0, 0, 0, sysdate, 0);" +   '\n')
    else:
        print("Line {0} does not contain at least three columns: {1}".format(lineno, row))

你真的不需要第一个循环来计算逗号。 一般来说,文件I / O是对任何计算应用程序的性能限制。 如果你不需要,不要做两次。

另外,一般来说,总是发布完整的错误消息。 我确信Python为您提供了行号和代码行,这使得这里的人们更容易提供帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM