Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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代码将MySql列中的值设置为NULL_Python_Mysql_Database_Csv - Fatal编程技术网

转换;“南”;使用python代码将MySql列中的值设置为NULL

转换;“南”;使用python代码将MySql列中的值设置为NULL,python,mysql,database,csv,Python,Mysql,Database,Csv,我正在通过python在MySql中编写/存储数据。如果MySql中的列数据包含“NAN”,那么如何处理它们。目前我知道如何处理空白或无值,但在这里我被卡住了。数据如下所示 # file no 2 # some description line #"Time","col.no","dat.va","all_val","graph_da","tem","vel","acc", "all.valu","rand" "2016-02-25 14:50:00",0,12.94,20.88,17.87,

我正在通过python在MySql中编写/存储数据。如果MySql中的列数据包含“NAN”,那么如何处理它们。目前我知道如何处理空白或无值,但在这里我被卡住了。数据如下所示

# file no 2
# some description line
#"Time","col.no","dat.va","all_val","graph_da","tem","vel","acc", "all.valu","rand"

"2016-02-25 14:50:00",0,12.94,20.88,17.87,"NAN",14,14,13.9,"NAN"
"2016-02-25 15:00:00",1,13.48,20.86,18,"NAN",13.4,13,13.2,"NAN"
"2016-02-25 15:10:00",2,13.89,20.84,18.07,18.03,12.8,12,12.6,13 
"2016-02-25 21:30:00",3,15.76,20.18,17.96,18.25,0.09,0,0.07,0.16
"2016-02-25 21:40:00",4,15.72,,17.91,,0.08,"NAN",0.09,0.18
"2016-02-25 21:50:00",5,15.66,20.07,17.86,18.17,0.03,"NAN",0.05,0.09
"2016-02-25 23:30:00",6,14.98,19.26,17.12,17.44,"NAN","NAN","NAN","NAN"
有几千行随机包含这个“NAN”,因此如果有人给我逻辑来处理,那就太好了,例如,每当它遇到NAN时,它就放NAN或none。我处理空空格的代码是这样的

with open(filepath) as f:
    lines = f.readlines()
max_lines = len(lines)
for k, line in enumerate(lines):
    if k >= (int(skip_header_line) + int(index_line_number)):
        data_tmp = line.strip().split(',')

        strDate = data_tmp[0].replace("\"", "")
    strDate = strDate.split('.')[0]   
    timestamp = datetime.datetime.strptime(strDate, '%Y-%m-%d %H:%M:%S') 
    ts = calendar.timegm(timestamp.timetuple())           
  #  _ts = ts * 1000000 

        data_buffer = [ts] + data_tmp[1:]                                                                    
        data_buffer = [ts] + data_tmp[1:]
        data_buffer = [v if v is not "" and v is not " " else None for v in data_buffer]
        print data_buffer
        cursor.execute(add_data, data_buffer)
        cnx.commit()
        with open(marker_file, "w") as f:
            f.write(" ".join([ str(item[0]), str(data_tmp[0]), str(max_lines),
                   str(k-int(skip_header_line)+1) ]))
cursor.close()
cnx.close()

任何帮助或提示都将不胜感激,因为我尽了最大努力找到解决方案,但没有发现任何有用的东西。请提前向Thanx寻求帮助

不要编写自己的CSV解析代码。使用模块

除此之外,您还可以使用lambda函数过滤列表,如下所示。有一个函数可以从csv中删除空行和注释行,还有一个函数可以将每行上的
“NAN”
转换为
None

import csv
import calendar
from datetime import datetime

with open('foo.csv', newline='') as csvfile:
    data_lines = lambda l: l[0] != '#' and l.strip()
    NAN_2_None = lambda i: None if i == "NAN" else i

    csvreader = csv.reader(filter(data_lines, csvfile), delimiter=',', quotechar='"')
    for row in csvreader:
        dt = datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
        row[0] = calendar.timegm(dt.timetuple())
        data = map(NAN_2_None, row)

        # cursor.execute(add_data, data)
        print(list(data))
印刷品

[1456411800, '0', '12.94', '20.88', '17.87', None, '14', '14', '13.9', None] [1456412400, '1', '13.48', '20.86', '18', None, '13.4', '13', '13.2', None] [1456413000, '2', '13.89', '20.84', '18.07', '18.03', '12.8', '12', '12.6', '13 '] [1456435800, '3', '15.76', '20.18', '17.96', '18.25', '0.09', '0', '0.07', '0.16'] [1456436400, '4', '15.72', '', '17.91', '', '0.08', None, '0.09', '0.18'] [1456437000, '5', '15.66', '20.07', '17.86', '18.17', '0.03', None, '0.05', '0.09'] [1456443000, '6', '14.98', '19.26', '17.12', '17.44', None, None, None, None] [1456411800,'0','12.94','20.88','17.87',无,'14','14','13.9',无] [1456412400,'1','13.48','20.86','18',无,'13.4','13','13.2',无] [1456413000, '2', '13.89', '20.84', '18.07', '18.03', '12.8', '12', '12.6', '13 '] [1456435800, '3', '15.76', '20.18', '17.96', '18.25', '0.09', '0', '0.07', '0.16'] [1456436400,'4','15.72','17.91','0.08','0.09','0.18'] [1456437000,'5','15.66','20.07','17.86','18.17','0.03',无,'0.05','0.09'] [1456443000,'6','14.98','19.26','17.12','17.44',无,无,无,无]
但是,考虑使用简单的工具(如
sed
)预处理文件,并改用这种方法,可能会更快。

不要编写自己的CSV解析代码。使用模块

除此之外,您还可以使用lambda函数过滤列表,如下所示。有一个函数可以从csv中删除空行和注释行,还有一个函数可以将每行上的
“NAN”
转换为
None

import csv
import calendar
from datetime import datetime

with open('foo.csv', newline='') as csvfile:
    data_lines = lambda l: l[0] != '#' and l.strip()
    NAN_2_None = lambda i: None if i == "NAN" else i

    csvreader = csv.reader(filter(data_lines, csvfile), delimiter=',', quotechar='"')
    for row in csvreader:
        dt = datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
        row[0] = calendar.timegm(dt.timetuple())
        data = map(NAN_2_None, row)

        # cursor.execute(add_data, data)
        print(list(data))
印刷品

[1456411800, '0', '12.94', '20.88', '17.87', None, '14', '14', '13.9', None] [1456412400, '1', '13.48', '20.86', '18', None, '13.4', '13', '13.2', None] [1456413000, '2', '13.89', '20.84', '18.07', '18.03', '12.8', '12', '12.6', '13 '] [1456435800, '3', '15.76', '20.18', '17.96', '18.25', '0.09', '0', '0.07', '0.16'] [1456436400, '4', '15.72', '', '17.91', '', '0.08', None, '0.09', '0.18'] [1456437000, '5', '15.66', '20.07', '17.86', '18.17', '0.03', None, '0.05', '0.09'] [1456443000, '6', '14.98', '19.26', '17.12', '17.44', None, None, None, None] [1456411800,'0','12.94','20.88','17.87',无,'14','14','13.9',无] [1456412400,'1','13.48','20.86','18',无,'13.4','13','13.2',无] [1456413000, '2', '13.89', '20.84', '18.07', '18.03', '12.8', '12', '12.6', '13 '] [1456435800, '3', '15.76', '20.18', '17.96', '18.25', '0.09', '0', '0.07', '0.16'] [1456436400,'4','15.72','17.91','0.08','0.09','0.18'] [1456437000,'5','15.66','20.07','17.86','18.17','0.03',无,'0.05','0.09'] [1456443000,'6','14.98','19.26','17.12','17.44',无,无,无,无]

但是,考虑使用简单的工具(如
sed
)预处理文件可能会更快,并改用这种方法。

为什么不简单地预处理整个csv或dat文件,并用空字符串替换
“NaN”
?您甚至不需要为此编写python脚本,只需简单的文本编辑器搜索和替换即可。当数据被导入MySQL时,它们将被解释为空值,就像您在问题中提供的示例数据第4行中出现的空值一样。@dreftymac thanx了解有用的提示。我想要的正是这个东西,所以在预处理过程中,它用空字符串替换“NAN”,但我无法进行相关更改。你能告诉我在哪里可以做这些改变吗。我非常感谢您的帮助。这个问题已经有了关于stackoverflow的答案。参见例如。请先看一下,如果你还需要帮助,请回来。@dreftymac thanx寻求帮助。我会看一看,如果我需要帮助,我会来的。thanx用于提示。不必如此复杂。请看一下下面的python脚本。为什么不简单地预处理整个csv或dat文件,并用空字符串替换
“NaN”
?您甚至不需要为此编写python脚本,只需简单的文本编辑器搜索和替换即可。当数据被导入MySQL时,它们将被解释为空值,就像您在问题中提供的示例数据第4行中出现的空值一样。@dreftymac thanx了解有用的提示。我想要的正是这个东西,所以在预处理过程中,它用空字符串替换“NAN”,但我无法进行相关更改。你能告诉我在哪里可以做这些改变吗。我非常感谢您的帮助。这个问题已经有了关于stackoverflow的答案。参见例如。请先看一下,如果你还需要帮助,请回来。@dreftymac thanx寻求帮助。我会看一看,如果我需要帮助,我会来的。thanx用于提示。不必如此复杂。请看一下下面的python脚本。非常抱歉,我没有及时回复。我被困在别的事情上了。我现在应用了你的解决方案,效果非常好。我接受你的回答。但我很感谢您将此批量插入指向MySql的csv。我将尝试使用sed并做一些研究。我会回来,如果我坚持批量插入。好的,很高兴听到这对你有用。请在这里作为新问题而不是评论进行跟进。好吧。。。我不能阻止你,但直接捅别人可不好。此外,也不能保证我能帮助您解决mySQL问题。如果你问一个独立的问题会更好。人们会来尝试回答的。谢谢你的有用提示。我将遵循这些指导原则。非常抱歉,我没有及时回复。我被困在别的事情上了。我现在应用了你的解决方案,效果非常好。我接受你的回答。但我很感谢您将此批量插入指向MySql的csv。我将尝试使用sed并做一些研究。我会回来,如果我坚持批量插入。好的,很高兴听到这对你有用。请在这里作为新问题而不是评论进行跟进。好吧。。。我不能阻止你,但直接捅别人可不好。而且也不能保证我能