Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python解析输入csv文件以获得输出sql文件_Python_Csv_Python 3.x - Fatal编程技术网

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

使用python解析输入csv文件以获得输出sql文件,python,csv,python-3.x,Python,Csv,Python 3.x,基本上,我在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 li

基本上,我在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()  
我得到了一个错误:

列表索引超出范围


在读卡器中的
行中记录
。您可能只是在csv文件的末尾(或开头)有一个空行

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

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

在读卡器中的
行中记录
。您可能只是在csv文件的末尾(或开头)有一个空行

这意味着该行的
数组将为空,
行[0]
行[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(',')
确定并记住输入文件所有行中一行中的最大逗号数。之后,您甚至没有使用这些信息来验证您的输入

Jack已经指出了一点:验证您的输入:

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为您提供了行号和代码行,这使得这里的人更容易帮助您。

使用您的代码

NumCommas = 0  

File = open(InFileName)  
for line in File:  
    if line.count(',') > NumCommas:  
        NumCommas = line.count(',')
确定并记住输入文件所有行中一行中的最大逗号数。之后,您甚至没有使用这些信息来验证您的输入

Jack已经指出了一点:验证您的输入:

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为您提供了行号和代码行,这使得这里的人们更容易提供帮助。

只有一些Python风格的指针:1。TitleCase应仅用于类名:变量应为大小写。2.使用“逗号空间”来分隔函数的参数。哦,还有一件事:从可能来自用户的数据构造SQL查询时要非常非常小心。在本例中可能不是这样,但这并不是一个好习惯。TitleCase应仅用于类名:变量应为大小写。2.使用“逗号空间”来分隔函数的参数。哦,还有一件事:从可能来自用户的数据构造SQL查询时要非常非常小心。在这种情况下可能不是这样,但这并不是一个好习惯。