需求是这样的:

有大量名字以序列号排序 内容如下面内容的文本文件

姓名:aaaa

性别:bbb

年龄:ccc

籍贯:ddd

冒号和内容中间有数量不等的空格,如何能批量导入这些文件进入一个数据库,比如access

形如下面的形式

姓名 性别 年龄 籍贯

aaaa1 bbb1 ccc1 ddd1

aaaa2 bbb2 ccc2 ddd2

其中某项空缺的时候,比如有一个文本文件里年龄空缺,怎么保证列表还能正确

下面是测试用的数据文件:外链网址已屏蔽dhxy.info/upload/CS/1134036281_1.rar方案是生成一个csv文件,然后直接导入access,下面是Python实现:

# -*- coding: cp936 -*-

#convert txt data file into csv file

import sys

import os.path

def output(cur):

s = ""

keys = ["名字","性别","年龄","籍贯"]

for key in keys:

if(cur.has_key(key)):

s += cur[key]

s += ","

s+="\n"

return s

def convertFile(filename):

try:

f = file(filename,'r')

fout = file("result.csv",'a')

#fout.writelines("name,sex,age,birthplace\n")

cur = {}

s=f.readline()

tokens = ["名字","性别","年龄","籍贯"]

while len(s) > 0:

lv = s.split(":",2)

if(len(lv)!=2):

s=f.readline()

continue

token = lv[0].lower()

value = lv[1]

if cur.has_key(token) or len(cur)==len(tokens):

result = output(cur)

fout.writelines(result)

cur = {}

if token in tokens:

cur[token] = value.lstrip().rstrip("\n")

else:

print "error line"

s=f.readline()

if len(cur) > 0:

result = output(cur)

fout.writelines(result)

fout.close();

f.close()

except IOError:

print "data file not found!"

#main program

if len(sys.argv) != 2:

print "Usage:python convert.py directory"

sys.exit()

dirname = sys.argv[1]

try:

entryList = os.listdir(dirname)

#remove the result file first and write the header

fout = file("result.csv",'w+')

fout.writelines("名字,性别,年龄,籍贯\n")

fout.close()

for entry in entryList:

if os.path.isdir(dirname + "\\" + entry):

pass

else:

convertFile(dirname + "\\" + entry)

except WindowsError:

print "Dir not found!" + dirname

测试了一下,发现python干这个效率还不赖,6个数据文件,每个5M,P4 2.8G,大概30s跑完。下面是我的同学实现的C代码(跟上一个例子里同一个人:))

#include#include#include#include#defineOUT_FILE  "result.csv"#defineRECORD_MAX_LEN  256struct_record{charname[RECORD_MAX_LEN];charsex[RECORD_MAX_LEN];charage[RECORD_MAX_LEN];charbirth[RECORD_MAX_LEN];intname_len;intsex_len;intage_len;intbirth_len;

};struct_record record;staticchar*token[]={"名字:","性别:","年龄:","籍贯:"};staticinlineintout_record(FILE*out){//fprintf(stdout, "%s,%s,%s,%s ", record.name, record.sex, record.age, record.birth);

fwrite(record.name,1, record.name_len,out);

fwrite(",",1,1,out);

fwrite(record.sex,1, record.sex_len,out);

fwrite(",",1,1,out);

fwrite(record.age,1, record.age_len,out);

fwrite(",",1,1,out);

fwrite(record.birth,1, record.birth_len,out);

fwrite("",1,1,out);

record.name[0]='

测试结果,比Python快11倍....

所以,Python的速度的确比C要慢得多,这些开销主要来自他的动态类型. 在上一个例子中,体现不明显,

性能就不相上下了.

python写法和c很像_另一个Python和C程序的对比相关推荐

  1. 用python写用手机发邮件_如何用python写发邮件?

    原标题:如何用python写发邮件? 1. 163邮箱 163邮箱需要设置客户端授权密码 请输入图片描述 # coding:utf-8 from email.header import Header ...

  2. python写的网站如何发布_如何发布python程序

    如何发布一个Python程序: 1.安装一个pyInstaller 在pycharm里点 file-–>setting-–>Project workspace-->Interpret ...

  3. python单位转换编程英寸厘米_第一个Python程序的单位转换,python,换算

    第一个python程序 humansize.py ,这个脚本定义了一个单一的函数,这个approximate_size()函数把一个精确到字节的文件大小计算成一个有漂亮格式(大约计算的)的大小. 脚本 ...

  4. python写整数逆位运算_简单了解python的一些位运算技巧

    前言 位运算的性能大家想必是清楚的,效率绝对高.相信爱好源码的同学,在学习阅读源码的过程中会发现不少源码使用了位运算.但是为啥在实际编程过程中应用少呢?想必最大的原因,是较为难懂.不过,在面试的过程中 ...

  5. python写完后打不开门_感觉自己python已经入门了,为什么还是没法用Python写好程序?...

    主要是缺乏编程实践练习.在学习编程的过程中,只看不动手是学不会的,可以尝试自己编写一些简单的小程序,提高自己的编码能力. 下面的这个小案例,不看后面的代码,你能编写出来吗? 编程思路 创建一个空的列表 ...

  6. python写飞机大战什么水平_飞机大战python

    给大家整理的这套python学习路线图,按照此教程来一步步的学习,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大 ...

  7. python爬取视频自动播放_介绍一个python视频处理库:moviepy

    处理视频是一个常见的需求.那么在python中如何用代码处理视频呢?最近我无意间发现了一个很好用的python视频处理库moviepy,其使用起来简单易用,而且功能比较强大,这里记录一下分享给大家. ...

  8. python爬取百度百科表格_第一个python爬虫(python3爬取百度百科1000个页面)

    以下内容参考自:http://www.imooc.com/learn/563 一.爬虫简介 爬虫:一段自动抓取互联网信息的程序 爬虫可以从一个url出发,访问其所关联的所有的url.并从每个url指向 ...

  9. python concat函数 多张表_最全Python数据工具箱:标准库、第三方库和外部工具都在这里了 - Mr_YJY...

    导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库.函数和外部工具.其中既有Python内置函数和标准库,又有第三方库和工具.这些库可用于文件读写.网络抓取和解析.数据连接 ...

最新文章

  1. kernel和rootfs烧录与启动系统
  2. Android存储数据到本地文件
  3. 大规模部署桌面虚拟化时的问题
  4. 开门红讨采头,开工喜庆红色PSD分层海报模板
  5. 区块链开发入门书籍和文档
  6. Tuple and Tie
  7. 理解闭包 js回收机制
  8. 站在两个世界的边缘 程浩,一个认真生活过的人
  9. python中plt.hist_关于python中plt.hist参数的使用详解
  10. 蘑菇街2016校园招聘第一个编程题
  11. 人生需有三心境,你有吗?
  12. 括号配对检测python123_括的拼音_括组词_括意思(解释)-常用汉字大全
  13. WTGNet-PlC协议转换网关
  14. bte上了b网_酷站推荐 - tukkk.com - 小语种口语网
  15. python exception in thread_这个是什么原因,请问怎么处理Exception in thr
  16. 函数计算FC助力游戏群采集营销数据滴水不漏
  17. L3-1 千手观音【拓扑排序】
  18. SQLserver主从同步报错:Message: 无法创建 AppDomain “mssqlsystemresource.dbo[runtime].
  19. Vue实战电商系统-五商品管理
  20. 2021年全球及中国卷烟产销量、主营企业经营现状及发展趋势分析[图]

热门文章

  1. Keil MDK使用编译器AC5与AC6生成浏览信息的差异
  2. 学习中遇到的小技巧(陆续更新……)
  3. php判断支付宝,使用PHP判断是否为微信、支付宝等移动设备访问代码
  4. 计算机中的一些基本概念(速度,比特,门,电路图)
  5. linux scp 自动备份,linux Oracle 自动备份并scp
  6. 广西有职业计算机学校么,广西正久职业学校2020年有哪些专业
  7. Android 蓝牙监听与扫描
  8. 20000字干货,数据分析 Pandas 75个高频操作都在这儿了!
  9. 学习管理系统 LMS
  10. 计算机管理文件破坏怎么办,文件损坏,教您电脑文件损坏怎么修复