Python 如果csv文件包含空白字段,如何替换虚拟名称?
这是一个CSV文件,其中包含几行,但问题是每行包含6个字段,但也有一些字段包含一些缺少的字段。因此,在将结果上载到数据库时,我想用类似“NA”的逻辑删除替换缺少的字段 这里我展示了我所写的代码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("|")
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谢谢您的回答,我已经使用了第一条注释并更改了我的代码。但是请考虑使用加载数据代替