Мне очень грустно.Некоторые из моих CSV-файлов Stackoverflow не вставляются в мою локальную базу данных.Потому что я получил KeyError.Проблема в том, что он не работает для идентификатора posts.csv. Вместо этого он работает для идентификатора tags.csv.
Здесь 5 строк из posts.csv
4,1,7,2008-07-31,21:42:52,543,34799,"b""<p>I want to use a track-bar to change a form's opacity.</p>\n\n<p>This is my code:</p>\n\n<pre><code>decimal trans = trackBar1.Value / 5000
6,1,31,2008-07-31,22:08:08,241,15696,"b'<p>I have an absolutely positioned <code>div</code> containing several children, one of which is a relatively positioned <code>div</code>. When I use a <strong>percentage-based width</strong> on the child <code>div</code>, it collapses to \'0\' width on <a href=""http://en.wikipedia.org/wiki/Internet_Explorer_7"" rel=""noreferrer"">Internet 
7,2,None,2008-07-31,22:17:57,391,None,"b""<p>An explicit cast to double like this isn't necessary:</p>\n\n<pre><code>double trans = (double) trackBar1.Value / 5000.0
9,1,1404,2008-07-31,23:40:59,1716,439828,"b""<p>Given a <code>DateTime</code> representing a person's birthday, how do I calculate their age in years? </p>\n""",1,How do I calculate someone's age in C#?,"c#,.net,datetime,",64,376
11,1,1248,2008-07-31,23:55:37,1286,130055,"b'<p>Given a specific <code>DateTime</code> value, how do I display relative time, like:</p>\n\n<ul>\n<li>2 hours ago</li>\n<li>3 days ago</li>\n<li>a month ago</li>\n</ul>\n'",1,Calculate relative time in C#,"c#,datetime,time,datediff,relative-time-span,",34,528
Мой код:
def writePostsToSql():
con = sqlite3.connect("database.db")
cur = con.cursor()
cur.execute("CREATE TABLE IF NOT EXISTS posts (Id, PostTypeId, AcceptedAnswerId, Date, Time, Score, ViewCount, Body, OwnerUserId, Title, Tags, AnswerCount, FavoriteCount, PRIMARY KEY (Id), FOREIGN KEY (AcceptedAnswerId), FOREIGN KEY (OwnerUserId));") # use your column names here
with open('Posts.csv', 'r') as fin:
dr = csv.DictReader(fin) # comma is default delimiter
to_db = [(i['Id'], i['PostTypeId'], i['AcceptedAnswerId'], i['Date'], i['Time'], i['Score'], i['ViewCount'], i['Body'], i['OwnerUserId'], i['Title'], i['Tags'], i['AnswerCount'], i['FavoriteCount']) for i in dr]
cur.executemany("INSERT INTO posts (Id, PostTypeId, AcceptedAnswerId, Date, Time, Score, ViewCount, Body, OwnerUserId, Title, Tags, AnswerCount, FavoriteCount) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);", to_db)
con.commit()
con.close()
Мои предположения могут заключаться в том, что он не может прочитать идентификатор из-за вставленного пустого пространства между моими наборами данных.Как я могу изменить свой код, чтобы он игнорировал пробелы.
Я надеюсь, что вы, ребята, можете мне помочь, и если есть вопрос, пожалуйста, спросите.
С наилучшими пожеланиями
Tobias