a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 學院 > 操作系統 > 正文

Python 讀取csv文件批量入庫Mysql

2024-06-28 16:00:35
字體:
來源:轉載
供稿:網友

注:僅為筆記

1、Python ftp連接,下載文件

def ftpDownload() :	#創建ftp對象實例 	ftp = FTP()  	ftp.connect(FTPip, FTPPORT)  	#通過賬號和密碼登錄FTP服務器 	ftp.login(USERNAME,USERPWD)  	#如果參數 pasv 為真,打開被動模式傳輸 (PASV MODE) ,	#否則,如果參數 pasv 為假則關閉被動傳輸模式。	#在被動模式打開的情況下,數據的傳送由客戶機啟動,而不是由服務器開始。	#這里要根據不同的服務器配置#	ftp.set_pasv(0)	#在FTP連接中切換當前目錄 #	CURRTPATH= "/home1/ftPRoot/ybmftp/testupg/payment"#	ftp.cwd(CURRTPATH)  	#為準備下載到本地的文件,創建文件對象  	f = open(DownLocalFilename, 'wb')  	#從FTP服務器下載文件到前一步創建的文件對象,其中寫對象為f.write,1024是緩沖區大小  	ftp.retrbinary('RETR ' + DownRoteFilename , f.write , 1024)  	#關閉下載到本地的文件  	#提醒:雖然Python可以自動關閉文件,但實踐證明,如果想下載完后立即讀該文件,最好關閉后重新打開一次 	f.close()  	#關閉FTP客戶端連接	ftp.close()

2、日期字符串生成,拼裝文件名稱

def getYesterday() :	now = datetime.datetime.now()	date = now + datetime.timedelta(days = -1)	return date.strftime('%Y%m%d')

3、csv文件讀取

file_zip = zipfile.ZipFile(DownRoteFilename,'r')	for file in file_zip.namelist():		file_zip.extract(file,r'.')				with codecs.open(file,'rb','utf-8') as csvfile:	#		with open(file,'rb') as csvfile:			spamreader = csv.reader(csvfile)			line_num = 0			L1 = []			for row in spamreader:				line_num=line_num+1;				if	line_num ==7 :					#print ', '.join(row)					#存放字段前先清空					#SQL_FILEDS =[]					for s in row:						 print  s.decode('utf-8')						 SQL_FILEDS.append(s)				if line_num >7  and len(row) > 1 :					#print ', '.join(row)					L1.append(row)#					print L1					#達到批量處理行數之后批量入庫					if len(L1) >=BATCH_LINE :						MySQL_database(L1)						L1  =[]				#測試時候只讀取幾行					#if line_num >10 :				#	break			print	line_num			#循環讀取數據結束,處理剩余未達到批量處理的數組對象			if len(L1) >0  :				mysql_database(L1)				L1 =[]		#刪除解壓后文件		os.remove(file)注意中文編碼問題,

4、mysql數據插入

def mysql_database(L1):	conn = MySQLdb.connect(host='localhost', user='root',passwd='***',charset="utf8")	cursor = conn.cursor()	conn.select_db('mask_data')	#for row in L1 :	#	print row	#print SQL_FILEDS	sql_parm=''	for s in  SQL_FILEDS :		sql_parm +='%s,'	sql = 'insert into test1  VALUES ('+sql_parm[:-1]+') ' 	print sql	print len(L1)	cursor.executemany(sql,L1)			#test_all_count = int(cursor.rowcount)	#test_all = cursor.fetchall()		conn.commit()	cursor.close()	conn.close() 需要留意中文編碼,
conn = MySQLdb.connect(host='localhost', user='root',passwd='***',charset="utf8") 
如果不指定編碼會默認編碼,導致中文亂碼。

完成腳本:

# -*- coding: utf-8 -*-#!/usr/bin/env python##Author: Liu6import zipfileimport csvimport codecs import MySQLdbimport datetimeimport osfrom ftplib import FTPimport  codecs #import pandas as pdimport sysreload(sys)sys.setdefaultencoding('utf-8')def getYesterday() :	now = datetime.datetime.now()	date = now + datetime.timedelta(days = -1)	return date.strftime('%Y%m%d')dateStr = getYesterday()print dateStr#測試使用的字符串dateStr = '20170102'DownRoteFilename='provincePayDay_Zz-'+dateStr+'080300.zip'DownLocalFilename = DownRoteFilenameSQL_FILEDS =  []#設置批量處理數據數量BATCH_LINE = 10000#指定IP地址和端口,賬號密碼信息FTPIP= "127.0.0.1"FTPPORT= 21USERNAME= "test"USERPWD= "test"encoding='utf-8'def ftpDownload() :	#創建ftp對象實例 	ftp = FTP()  	ftp.connect(FTPIP, FTPPORT)  	#通過賬號和密碼登錄FTP服務器 	ftp.login(USERNAME,USERPWD)  	#如果參數 pasv 為真,打開被動模式傳輸 (PASV MODE) ,	#否則,如果參數 pasv 為假則關閉被動傳輸模式。	#在被動模式打開的情況下,數據的傳送由客戶機啟動,而不是由服務器開始。	#這里要根據不同的服務器配置#	ftp.set_pasv(0)	#在FTP連接中切換當前目錄 #	CURRTPATH= "/home1/ftproot/ybmftp/testupg/payment"#	ftp.cwd(CURRTPATH)  	#為準備下載到本地的文件,創建文件對象  	f = open(DownLocalFilename, 'wb')  	#從FTP服務器下載文件到前一步創建的文件對象,其中寫對象為f.write,1024是緩沖區大小  	ftp.retrbinary('RETR ' + DownRoteFilename , f.write , 1024)  	#關閉下載到本地的文件  	#提醒:雖然Python可以自動關閉文件,但實踐證明,如果想下載完后立即讀該文件,最好關閉后重新打開一次 	f.close()  	#關閉FTP客戶端連接	ftp.close()def mysql_database(L1):	conn = MySQLdb.connect(host='localhost', user='root',passwd='***',charset="utf8")	cursor = conn.cursor()	conn.select_db('mask_data')	#for row in L1 :	#	print row	#print SQL_FILEDS	sql_parm=''	for s in  SQL_FILEDS :		sql_parm +='%s,'	sql = 'insert into test1  VALUES ('+sql_parm[:-1]+') ' 	print sql	print len(L1)	cursor.executemany(sql,L1)			#test_all_count = int(cursor.rowcount)	#test_all = cursor.fetchall()		conn.commit()	cursor.close()	conn.close()def  readCSVFile() :	file_zip = zipfile.ZipFile(DownRoteFilename,'r')	for file in file_zip.namelist():		file_zip.extract(file,r'.')				with codecs.open(file,'rb','utf-8') as csvfile:	#		with open(file,'rb') as csvfile:			spamreader = csv.reader(csvfile)			line_num = 0			L1 = []			for row in spamreader:				line_num=line_num+1;				if	line_num ==7 :					#print ', '.join(row)					#存放字段前先清空					#SQL_FILEDS =[]					for s in row:						 print  s.decode('utf-8')						 SQL_FILEDS.append(s)				if line_num >7  and len(row) > 1 :					#print ', '.join(row)					L1.append(row)#					print L1					#達到批量處理行數之后批量入庫					if len(L1) >=BATCH_LINE :						mysql_database(L1)						L1  =[]				#測試時候只讀取幾行					#if line_num >10 :				#	break			print	line_num			#循環讀取數據結束,處理剩余未達到批量處理的數組對象			if len(L1) >0  :				mysql_database(L1)				L1 =[]		#刪除解壓后文件		os.remove(file)ftpDownload()readCSVFile()#刪除ftp上下載的文件#os.remove(DownLocalFilename)											


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美在线一区二区 | 久久精品中文 | 99久久精品免费看国产免费软件 | 国产精品v欧美精品v日韩 | 成人一二三区 | 欧美视频区| 午夜精品一区二区三区在线观看 | 亚洲三级在线免费观看 | 亚洲一区二区在线播放 | 综合久久综合久久 | 日韩精品区 | 亚洲精品电影在线观看 | 国产精品中文字幕一区二区三区 | www.色综合 | 狠狠91| 久久av一区二区 | 久久久久综合 | 午夜欧美一区二区三区在线播放 | 在线不卡日本 | 天天操天天摸天天干 | 成人高清在线 | 香蕉av777xxx色综合一区 | 精品福利一区二区三区 | 夜夜精品视频 | 成人久久久精品国产乱码一区二区 | 成人黄色av | 麻豆一区二区 | 久久久夜夜夜 | 久久精品 | 国产精品一区二区不卡视频 | 国产欧美一区二区精品性色 | 精品国产乱码久久久久久1区2区 | 欧美亚洲二区 | 狠狠色综合网站久久久久久久 | 日本不卡免费新一二三区 | 五月婷婷婷婷 | 久久久久国产一区二区三区四区 | 亚洲一区二区三区久久 | 欧美激情精品 | 日韩精品一区二区三区中文在线 | 一区二区三区国产好 |