我有一个从url导入并放入数据库的csv,但是它会在名称和id周围用引号导入,就像删除它们一样。 csv文件的原始格式为
"Apple Inc.",113.08,113.07
"Alphabet Inc.",777.61,777.30
"Microsoft Corporation",57.730,57.720
我目前的代码如下。
def csv_new(conn, cursor, filename):
with open(filename, 'rt') as csv_file:
csv_data = csv.reader(csv_file)
for row in csv_data:
if(not row[0][0].isdigit()):
continue
split = [int(x) for x in row[0].split('/')]
row[0] = datetime.datetime(split[2], split[0],
split[1]).date().isoformat()
print(row);
cursor.execute('INSERT INTO `trade_data`.`import_data`'
'(date, name, price) VALUES(%s, "%s", %s)',
row)
conn.commit()
最终数据库看起来像这样
Name | Price1| Price 2|
'Apple Inc.' 113.08 113.07
'Alphabet Inc.' 777.61 777.30
'Microsoft Corporation' 57.730 57.720
我希望它看起来像
Name | Price1| Price 2|
Apple Inc. 113.08 113.07
Alphabet Inc. 777.61 777.30
Microsoft Corporation 57.730 57.720
我尝试在csv.reader中使用for row(new_data.splitlines(),delimiter =',skipinitialspace = True):但是它引发了错误
答案 0 :(得分:2)
csv.reader
正确删除引号。您可能正在查看文本的带引号的字符串表示而不是实际文本。
>>> new_data = '''"Apple Inc.",113.08,113.07
... "Alphabet Inc.",777.61,777.30
... "Microsoft Corporation",57.730,57.720'''
>>>
>>> import csv
>>>
>>> for row in csv.reader(new_data.splitlines()):
... print(','.join(row))
...
Apple Inc.,113.08,113.07
Alphabet Inc.,777.61,777.30
Microsoft Corporation,57.730,57.720
>>>
答案 1 :(得分:1)
想出来,问题是因为tdelaney提到的是引号并不是字符串中的python,所以我的值在改变
cursor.execute('INSERT INTO `trade_data`.`import_data`'
'(date, name, price) VALUES(%s, "%s", %s)',
row)
到%s而不是"%s"它修复了问题并删除了额外的报价。