Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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文件包含空白字段,如何替换虚拟名称?_Python_Mysql_Csv - Fatal编程技术网

Python 如果csv文件包含空白字段,如何替换虚拟名称?

Python 如果csv文件包含空白字段,如何替换虚拟名称?,python,mysql,csv,Python,Mysql,Csv,这是一个CSV文件,其中包含几行,但问题是每行包含6个字段,但也有一些字段包含一些缺少的字段。因此,在将结果上载到数据库时,我想用类似“NA”的逻辑删除替换缺少的字段 这里我展示了我所写的代码 with open("results/somename.csv","r") as f: for record in f: #print record.split()[0] record = record.split("|")

这是一个CSV文件,其中包含几行,但问题是每行包含6个字段,但也有一些字段包含一些缺少的字段。因此,在将结果上载到数据库时,我想用类似“NA”的逻辑删除替换缺少的字段

这里我展示了我所写的代码

with open("results/somename.csv","r") as f:
        for record in f:
            #print record.split()[0]
            record = record.split("|")
            file1 = record[0]
            file2 = record[1]
            file3 = record[2]
            file4 = record[3]
            file5 = record[4]
            if not record[5] :
                file6 = record[5]
            else:
                file6 = 'NA'
            if not record[6] :
                file7 = record[6]
            else:
                file7 =  'NA'
在这里,我根据分隔符
|
拆分文件,然后尝试将文件拆分为可在数据库中使用的字段。现在由于信息不足,记录[5]和记录[6]在某些行(并非全部)中不可用。因此,我正在检查它是否包含任何字符串,否则将替换为
'NA'
。但在执行过程中出现了错误

Traceback (most recent call last):
  File "db_kiran.py", line 15, in <module>
    if not record[5] :
IndexError: list index out of range
回溯(最近一次呼叫最后一次):
文件“db_kiran.py”,第15行,在
如果没有记录[5]:
索引器:列表索引超出范围
因此,我只想在缺少的字段中替换为“NA”。

使用以下代码

with open("results/somename.csv","r") as f:
    for record in f:
        #print record.split()[0]
        record = record.split("|")
        file1 = record[0]
        file2 = record[1]
        file3 = record[2]
        file4 = record[3]
        file5 = record[4]
        try:
            file6 = record[5]
        except IndexError as e:
            file6 = 'NA'
            file7 = 'NA'
            continue
        try:
            file7 = record[6]
        except IndexError as e:
            file7 = 'NA'
       'do something'
希望这有帮助

使用以下代码

with open("results/somename.csv","r") as f:
    for record in f:
        #print record.split()[0]
        record = record.split("|")
        file1 = record[0]
        file2 = record[1]
        file3 = record[2]
        file4 = record[3]
        file5 = record[4]
        try:
            file6 = record[5]
        except IndexError as e:
            file6 = 'NA'
            file7 = 'NA'
            continue
        try:
            file7 = record[6]
        except IndexError as e:
            file7 = 'NA'
       'do something'

希望这有帮助

添加到Jay的通用方法代码中

def get_file(record, index, default="N/A"):        
    try:
         if not record[index]: # not sure above this line, copied from your code
             return record[index]
    except IndexError:
         return default


with open("results/somename.csv","r") as f:
        # <your code>...

        # Posible index error
        file6 = get_file(record, 5)
        # Even you can check here 
        # if file6 == 'N/A':
        #    <code to return all next files as N/A>
        file7 = get_file(record, 6)
def get_文件(记录、索引、默认值=“N/A”): 尝试: 如果不记录[索引]:#不确定在这一行上面,从代码中复制 返回记录[索引] 除索引器外: 返回默认值 以open(“results/somename.csv”、“r”)作为f: # ... #可能的索引错误 file6=get_文件(记录,5) #你也可以在这里查 #如果文件6=='N/A': #<以N/A形式返回所有后续文件的代码> file7=get_文件(记录,6)
添加到Jay的通用方法代码中

def get_file(record, index, default="N/A"):        
    try:
         if not record[index]: # not sure above this line, copied from your code
             return record[index]
    except IndexError:
         return default


with open("results/somename.csv","r") as f:
        # <your code>...

        # Posible index error
        file6 = get_file(record, 5)
        # Even you can check here 
        # if file6 == 'N/A':
        #    <code to return all next files as N/A>
        file7 = get_file(record, 6)
def get_文件(记录、索引、默认值=“N/A”): 尝试: 如果不记录[索引]:#不确定在这一行上面,从代码中复制 返回记录[索引] 除索引器外: 返回默认值 以open(“results/somename.csv”、“r”)作为f: # ... #可能的索引错误 file6=get_文件(记录,5) #你也可以在这里查 #如果文件6=='N/A': #<以N/A形式返回所有后续文件的代码> file7=get_文件(记录,6)
对于数据库默认本机支持的内容,需要进行大量的艰苦工作。只需将相关列更改为默认值NA。这将确保在向列中插入NULL时,该列显示为NA

ALTER TABLE Table1 ALTER COLUMN my_column set DEFAULT 'NA'
这使得许多代码变得多余,但是等等,您不需要手动迭代文件并逐行拆分它们来完成这项工作。Python对这一点有很好的支持,它可以将代码再减少几行

但是等等

您可以在一个mysql命令中实现这一点。甚至不需要一行python代码

LOAD DATA INFILE 'somename.csv' INTO TABLE 'Table1'
FIELDS TERMINATED BY '|'
该语句将文本文件中的行读取到 以非常高的速度移动桌子


对于数据库默认本机支持的内容,需要进行大量的艰苦工作。只需将相关列更改为默认值NA。这将确保在向列中插入NULL时,该列显示为NA

ALTER TABLE Table1 ALTER COLUMN my_column set DEFAULT 'NA'
这使得许多代码变得多余,但是等等,您不需要手动迭代文件并逐行拆分它们来完成这项工作。Python对这一点有很好的支持,它可以将代码再减少几行

但是等等

您可以在一个mysql命令中实现这一点。甚至不需要一行python代码

LOAD DATA INFILE 'somename.csv' INTO TABLE 'Table1'
FIELDS TERMINATED BY '|'
该语句将文本文件中的行读取到 以非常高的速度移动桌子


请检查拆分后数组的长度。使用if来执行预期的操作。@ SunKeStAKEK谢谢。@ E4C5谢谢您的回答,我已经使用了第一条注释并更改了我的代码。但是请考虑使用加载的数据,请在拆分之后检查数组的长度。使用if来执行预期的操作。@ SunKeStAKEK谢谢。@ E4C5谢谢您的回答,我已经使用了第一条注释并更改了我的代码。但是请考虑使用加载数据代替