KeyError, вставив CSV в базу данных? - PullRequest
0 голосов
/ 10 июня 2018

Мне очень грустно.Некоторые из моих 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&nbsp

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

1 Ответ

0 голосов
/ 10 июня 2018

В вашем файле post.csv вы не включили заголовки (заголовки столбцов).Поэтому, если у вас есть файл post.csv со следующим содержимым:

Id,PostTypeId,AcceptedAnswerId,Date,Time,Score,ViewCount,Body,OwnerUserId,Title,Tags,AnswerCount,FavoriteCount
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&nbsp

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

плюс, если вы переименуете файл из «Posts.csv» в «posts.csv», ваш код должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...