我正在使用的数据集位于以下格式的多个文本文件中:
#*TITLE1
#@AUTHOR1,AUTHOR2
#tYEAR
#cpublicationvenue
#index1
每个区块代表一篇论文。在我的数据集中,我有成千上万的这些块。我想将此信息插入到我有多个表的数据库中。我在下面写的代码完美无缺。其他时候,当我尝试填充数据库时,它会随机给我一个错误,如:
NameError: name 'title' is not defined
我现在正处于我想将所有这些数据放入我的数据库的阶段,但是我想确保这个代码已经解释了当一个块例如缺少发布场地线时,在这种情况下只留下该列那一行空白。 这是我写的代码:
import MySQLdb
conn = MySQLdb.connect(host="xx", user="xx", db="xx")
db1 = conn.cursor()
with open("path/to/file", "rb") as f:
for line in f:
if line.startswith("#*"):
title = line[2:]
elif line.startswith("#t"):
year = line[2:] # will ignore first two characters of line
elif line.startswith("#c"):
publication_venue = line[2:]
elif line.startswith("#index"):
ID = line[6:]
elif line.startswith("#@"):
author_list = line.split(",")
author_list[0] = author_list[0][2:]
elif line.strip() == '':
db1.execute('''INSERT INTO papers(
ID, TITLE, YEAR, Publication_Venue)
VALUES (%s,%s,%s,%s,%s)''',
(ID, title, year, publication_venue))
for In_order, author in enumerate(author_list, start=1):
In_order = In_order
author = author
db1.execute('''INSERT INTO authors(
ID, AUTHOR, In_order) VALUES(%s,%s,%s)''',
(ID, author, In_order))
conn.commit()
title = None
year = None
publication_venue = None
ID = None
author_list = None
else:
continue
有人可以告诉我为什么我会收到此名称错误,因为我已在我的代码中明确定义了它!
答案 0 :(得分:1)
您只在第一个recently-updated
内定义了title
:
if
如果你没有到达那里(该行不以if line.startswith("#*"):
title = line[2:]
开头),则它未定义。
很明显,因为你指定了以下内容实际上是问题:
我在下面编写的代码非常有效有时。其他时候,当我尝试填充数据库时,它会随机给我一个错误。