设为首页 收藏本站
查看: 1420|回复: 0

[经验分享] python cvs文件处理脚本 python csv

[复制链接]

尚未签到

发表于 2018-8-6 10:07:42 | 显示全部楼层 |阅读模式
#!/usr/bin/env python  
#coding=utf-8
  

  
from itertools import izip
  
import urllib,urllib2,urllib2,json,csv,sys,time,chardet
  

  
csv_file=sys.argv[1]
  

  
#定义需要导入的列,无顺序
  
Check_Head=("name","phone","isSell","origin","type","city","brand","series","model","year","plate" ,"remark")
  

  
##values 为True的表示不可以为空,为False的可以为空
  
keys={"name":True,"phone":True,"isSell":True,"origin":True,"type":False,"city":False,"brand":False,"series":False,"model":False,"year":False,"plate":False ,"remark":False}
  

  

  
#post
  
def http_post(data,url):
  jdata = json.dumps(data)
  req = urllib2.Request(url, jdata)
  response = urllib2.urlopen(req)
  return response.read()
  

  

  
#获取需要处理的csv文件的字符编码
  
def Codeing(file):
  try:
  f = open( file, 'rb' )
  fencoding=chardet.detect(f.read())
  f.close()
  return fencoding["encoding"]
  except Exception,err:
  print Exception, ":","%s" % err
  sys.exit()
  
decode=Codeing(csv_file)
  
encode= sys.stdin.encoding
  
###导入询问
  
def Export_Inquiry():
  while True :
  YS=raw_input("确认导入请输入Y,退出请输入N :".decode('utf-8').encode(encode)).strip()
  if YS == "Y":
  break
  elif YS == "N":
  sys.exit()
  print u"已开始导入,导入过程中请勿退出!"
  

  
#导入环境配置
  
def Export_Env():
  while True :
  export_env=raw_input("请输入导入环境prod/uat ? :".decode('utf-8').encode(encode)).strip()
  if export_env == "prod":
  url='http://www.xxxxx.com/webapi/public/register_carneed'
  print u"你要导入的是生产环境,请确认是否需要导入 ?"
  return  url
  elif export_env == "uat":
  print u"你要导入的是UAT环境,请确认是否需要导入 ?"
  url='http://uat.xxxx.com/webapi/public/register_carneed'
  return  url
  

  

  

  
def Check_Csv(csv_file,Head,coding):
  suffix=csv_file.split(".")[-1]
  if suffix != "csv":
  sys.exit("请输入csv文件")
  try:
  f = open( csv_file, 'rb' )
  except Exception,err:
  print Exception, ":","%s" % err
  sys.exit()
  reader = csv.reader( f )
  loop=0
  for row in reader:
  if reader.line_num == 1:
  if len(row) != len(Head):
  print u"请检查你的csv文件列数与要求不一致;"
  print u"你导入为%s 列:%s" % (len(row),row)
  print u"正确应该%s 列:%s" % (len(Head),list(Head))
  sys.exit()
  err_head=[]
  list_head=[]
  for li in row:
  li=li.strip().decode(coding)
  if li not in Head:
  err_head += [li]
  else:
  list_head += [li]
  if err_head:
  print u"列名有误:%s 请确认是否与以下匹配" % err_head
  #print "正确请参考如下列名:"
  print  list(Head)
  sys.exit()
  list_head=tuple(list_head)
  continue
  else:
  if len(row) == 0 :##去除空行
  print u"第%s行为空,请处理" %  reader.line_num
  sys.exit()
  row = iter( row )##放入迭代器
  out={}
  for key in list_head:
  out[key] = row.next().strip().decode(coding).encode("UTF-8") ##根据前面获取的字符编码解码
  data = out
  IsNull_Key={}
  for (k,v) in keys.items():##检查不能为空的字段的值是否为空,如果为空,则记录下并告诉行号!
  if v is True:
  if data[k] == "":
  IsNull_Key[k]=data[k]
  if IsNull_Key:
  print u"第%s行有空值:%s" % (reader.line_num , IsNull_Key)
  loop += 1
  result={"loop":loop,"list_head":list_head}
  return result
  f.close()
  

  
def Import_Csv(csv_file,list_head,url,coding):
  f = open( csv_file, 'rb' )
  reader = csv.reader( f )
  for row in reader:
  if reader.line_num == 1:
  continue
  else:
  row = iter( row )
  out={}
  for key in list_head:
  out[key] = row.next().strip().decode(coding).encode("UTF-8")  ##根据前面获取的字符编码解码
  data = out
  for (k,v) in keys.items():
  if v is False:
  if data[k] == "":
  del data[k]
  

  try:
  if reader.line_num % 2 == 0:
  time.sleep(1)
  resp=http_post(data=data,url=url)
  result=json.loads(resp)
  
#result["success"]=False
  if result["success"] is False:
  print u"请注意:第%s行导入失败! %s " % (reader.line_num,resp)
  else:
  print u"成功导入第%s行:%s" % (reader.line_num,resp)
  except Exception,err:
  print Exception, ":","%s" % err
  sys.exit()
  

  f.close()
  print u"导入已完成,共导入%s行。"  % (reader.line_num - 1)
  

  

  

  
print "############################################"
  
print u"###正在校验csv文件格式,请稍等.........#####"
  
print "############################################"
  

  

  
result=Check_Csv(csv_file,Check_Head,decode)
  
loop=result["loop"]
  
list_head=result["list_head"]
  
if loop > 0:
  print u"请按以上提示处理后再进行导入!"
  sys.exit()
  
else:
  print u"文件格式校验已完成,请选择导入环境:"
  url=Export_Env()
  Export_Inquiry()
  Import_Csv(csv_file,list_head,url,decode)
  

  
print "############################################"
  
print u"################导入完成!##################"
  
print "############################################"

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-547434-1-1.html 上篇帖子: Centos 5.5 python 2.4升级python 2.6.6 下篇帖子: jenkins执行python脚本的方法,和python版本的兼容性问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表