【发布时间】:2015-12-06 00:30:06
【问题描述】:
所以情况是这样的:
我正在读取 CSV 文件,其中大部分时间,空单元格只是空字符串。无论出于何种原因,同一组中的某些文件在“空单元格”中包含一个空格字符串,而不是空字符串。
我正在使用
csv的 DictReader 从这些文件中读取数据(以 ',' 作为分隔符),它会在我将空字符串插入到PostgreSQL 数据库。我尝试注册一个设置
skipinitialspace=True的方言对象,但现在它们仍然是空字符串,与None不同,对于我设置为整数值的 SQL 表列仍然是无效输入(所以我我猜 DictReader 在删除前导空格之前会将空字符串转换为None。
我该如何解决这个问题?
免责声明:我可以通过在读取值并从 DictReader 获得行的 dict 后自己将所有一个空格字符串转换为 None 类型来获得解决方案,但它看起来很笨重,我更喜欢如果可能的话,更优雅的解决方案。
普通 csv 示例
foo_id,foo_text,foo_value
1,'hello',4
3,,2
示例问题 csv
bar_id,bar_text,bar_value
1,'hello',4
3, ,2
csv 读取脚本示例
with open('foo.txt') as csv_file:
csv.register_dialect('example_dialect', delimiter=',', skipinitialspace=True)
gtfsreader = DictReader(csv_file, dialect='example_dialect')
for row in gtfsreader:
print(row)
【问题讨论】:
-
如果您发布您正在使用的代码的相关部分,这可能会有所帮助。通常需要一个相当小的 runnable 示例,因此 csv 文件的一部分也很方便。
-
好提示,添加了一些代码
-
我认为最好的选择是手动将
" "值替换为None的笨重选项。如果你愿意,你可以创建一个csv.Reader的子类,它在幕后处理这个问题,但无论你是否隐藏它,你都会做同样的事情。我真的不认为这个建议值得回答。希望其他人可以提供更多帮助!
标签: python csv python-3.x