[D]python 文本读出的问题

小小小小周 2012-02-25 05:46:10
文本里面的内容如下:

JrId: 1
JournalTitle: AADE editors' journal
MedAbbr: AADE Ed J
ISSN: 0160-6999
ESSN:
IsoAbbr: AADE Ed J
NlmId: 7708172
JrId: 2
JournalTitle: AANA journal
MedAbbr: AANA J
ISSN: 0094-6354
ESSN:
IsoAbbr: AANA J
NlmId: 0431420
JrId: 3
JournalTitle: AARN news letter
MedAbbr: AARN News Lett
ISSN: 0001-0197
ESSN:
IsoAbbr: AARN News Lett
NlmId: 1251052

上面的文本我想插入到数据库里面,(7行一组)故想生成:
insert into (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId) values(%.....)

刚接触python 还不是很熟悉,下面是我写的有问题的:

#!/usr/bin/python
j=open('J_Entrez1.txt')
while True:
t=j.readline().strip().split(':')
if not t:
break
col,value = t
query = "insert into test (`%s`) values (%s)" %(col,'"'+value+'"')
print query
j.close()


上面得出来的是每一行生成了一条insert:
insert into test (`JrId`) values (" 1")
insert into test (`JournalTitle`) values (" AADE editors' journal")
insert into test (`MedAbbr`) values (" AADE Ed J")
insert into test (`ISSN`) values (" 0160-6999")
insert into test (`ESSN`) values ("")
insert into test (`IsoAbbr`) values (" AADE Ed J")
insert into test (`NlmId`) values (" 7708172")
…………
…………
…………
而我想要的是
insert into (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId) values("1"," AADE editors' journal"," AADE Ed J"," 0160-6999",""," AADE Ed J"," 7708172")
…………
…………
…………

想半天还是不知道如何实现。。麻烦高人指点下。


------------------------------
Double行动:
原帖分数:100
加分:100
...全文
176 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
小小小小周 2012-02-26
  • 打赏
  • 举报
回复
按照这个逻辑,自己写了个比较菜的,继续努力...


#!/usr/bin/python
f = open('J_Entrez2.txt')
LIST_col = []
LIST_value = []
count=0
while True:
# count = 0
line = f.readline().strip().split(':')
if line == ['']:
break
col,value = line
LIST_col.append(col)
LIST_value.append('"'+value+'"')
# query = "insert into test (`%s`) values (%s)" %(col,'"'+value+'"')
count += 1
if count==7:
query = "insert into test (%s) values (%s)" %(','.join(LIST_col),','.join(LIST_value))
print query
count=0
LIST_col = []
LIST_value = []
f.close()

~
~
~

root@zhoujy:/home/zhoujy/0225# python e.py
insert into test (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId) values (" 1"," AADE editors' journal"," AADE Ed J"," 0160-6999",""," AADE Ed J"," 7708172")
insert into test (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId) values (" 2"," AANA journal"," AANA J"," 0094-6354",""," AANA J"," 0431420")
insert into test (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId) values (" 3"," AARN news letter"," AARN News Lett"," 0001-0197",""," AARN News Lett"," 1251052")
root@zhoujy:/home/zhoujy/0225#


小小小小周 2012-02-26
  • 打赏
  • 举报
回复
感谢三位,后面2位的方法对我来说受益匪浅啊,
结贴.
MainRed 2012-02-26
  • 打赏
  • 举报
回复
测试结果:
insert into (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId)values("1","AADE editors' journal","AADE Ed J","0160-6999","","AADE Ed J","7708172")
insert into (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId)values("2","AANA journal","AANA J","0094-6354","","AANA J","0431420")
insert into (JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId)values("3","AARN news letter","AARN News Lett","0001-0197","","AARN News Lett","1251052")
MainRed 2012-02-26
  • 打赏
  • 举报
回复

fin = open('in.txt','r')
fout = open('out.txt','w')
i=0
out = 'insert into ('
values = ')values('
for line in fin.readlines():
print line
content = line.split(':')
if i % 7 == 6:
out+=content[0].strip()
values+='"' + content[1].strip() + '"'
fout.write(out+values+')\n')
print i
out = 'insert into ('
values = ')values('
else:
out +=content[0].strip()+','
values+='"' + content[1].strip() + '"' + ','
i+=1
fin.close()
fout.close()
panghuhu250 2012-02-26
  • 打赏
  • 举报
回复
想把不同行的数据混合在一行,就要先把他们存起来。


fields = "JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId"
field_list = fields.split(',')

def dict2cmd(record):
values = [record[f] for f in field_list]
return 'insert into ( %s ) values ( "%s" )' % (fields, '","'.join(values))

def file2cmd(f):
counter = 0
record = {}
for line in open(f):
f, v = line.split(":")
record[f.strip()] = v.strip()
counter += 1
if counter == 7:
print dict2cmd(record)
record = {}
counter = 0
import sys
file2cmd(sys.argv[1])


测试:

C:\Documents and Settings\Owner\My Documents\csdn-code>c:\Python26\python.exe fi
le2cmd.py file2cmd.test
insert into ( JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId ) values ( "1","
AADE editors' journal","AADE Ed J","0160-6999","","AADE Ed J","7708172" )
insert into ( JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId ) values ( "2","
AANA journal","AANA J","0094-6354","","AANA J","0431420" )
insert into ( JrId,JournalTitle,MedAbbr,ISSN,ESSN,IsoAbbr,NlmId ) values ( "3","
AARN news letter","AARN News Lett","0001-0197","","AARN News Lett","1251052" )
小小小小周 2012-02-25
  • 打赏
  • 举报
回复
牛啊,非常感谢.回头我试试,这个对初学者来说高深了,学到不少东西..
libralibra 2012-02-25
  • 打赏
  • 举报
回复
只要你文本文档格式都是7个一组,这个脚本可以读任意多组
lines = open('J_Entrez1.txt').readlines()
ind = -1
cnt = 0
for line in lines:
if cnt%7==0:
ind += 1
exec('dic'+str(ind)+'={}')
exec('dic'+str(ind)+'[line.strip().split(":")[0]]=line.strip().split(":")[1].strip()')
cnt += 1

for i in range(ind+1):
print '+++++NEW LINE++++++++++++++++++'
first = 'insert into ('
last = ') values('
for key in eval('dic'+str(i)+'.keys()'):
first += key+','
last += '"'+eval('dic'+str(i)+'[key]')+'",'
query = first[:-1]+last[:-1]+')'
print query


测试结果,就用你的测试文件,一共3组
>>> ================================ RESTART ================================
>>>
+++++NEW LINE++++++++++++++++++
insert into (MedAbbr,JrId,JournalTitle,ISSN,IsoAbbr,NlmId,ESSN) values("AADE Ed J","1","AADE editors' journal","0160-6999","AADE Ed J","7708172","")
+++++NEW LINE++++++++++++++++++
insert into (MedAbbr,JrId,JournalTitle,ISSN,IsoAbbr,NlmId,ESSN) values("AANA J","2","AANA journal","0094-6354","AANA J","0431420","")
+++++NEW LINE++++++++++++++++++
insert into (MedAbbr,JrId,JournalTitle,ISSN,IsoAbbr,NlmId,ESSN) values("AARN News Lett","3","AARN news letter","0001-0197","AARN News Lett","1251052","")
>>>

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧