我正在尝试遍历一系列CSV文件(所有文件都具有相同的表结构),并通过for循环读取每个CSV文件,并将其写入到postgresql表(与CSV文件相同的结构)中,并且迭代到下一个CSV文件。
我要遍历约600个CSV,并且我的for循环在前33个迭代中工作正常,但是由于某种原因,此后的每个迭代都会失败。
起初,我认为这是我在postgrgesql表中的字段上施加的约束的问题(即NOT NULL / UNIQUE约束)。但是,当我尝试通过Postico手动写入任何文件时,它们的提交没有任何问题(这也排除了任何数据类型不匹配是我认为的潜在原因?)。
import psycopg2
from lister import list_generator
conn = psycopg2.connect("host=localhost dbname=backend user=macbookpro")
cur = conn.cursor()
list = list_generator('testing.csv')
n = 0
for a in list:
try:
with open('Testing/'+ str(a) +'.csv', 'rb') as f:
next(f)
cur.copy_from(f, 'table1', sep=',')
conn.commit()
print(str(n) + " " + str(a) + " completed")
n += 1
except:
print(str(n) + " " + str(a) + " failed")
n += 1
pass
答案 0 :(得分:0)
原来,这是一个空值处理问题。从熊猫数据帧写入的CSV将NaN表示为“”。在copy_from语句中传递null =“”作为参数,并将一些数据类型从int更改为float即可解决此问题。