我有一个Python csv.reader()问题: 我有一个文本文件,包含csv.reader基本上可以读取的数据,但我需要一个额外的功能,我恐怕还没有包含: 而不是返回单元格的值,我需要它返回一对(a,b),其中a是单元格内容,b是True或False,具体取决于读者是否从单元格中删除了引号。
示例:我的文件包含一行(此处不可见:单元格是以制表符分隔的):
BlogPost.deep_pluck(
:id,
:image,
:title,
:content,
blog_author: [:id, :name],
blog_category: [:id, :name],
)
它应该返回它"123" 123 """123"""
我不能使用quoting = csv.QUOTE_NONE,因为我在单元格中有引号和换行符。
关于我如何“超载”阅读器功能的任何想法?或者还有什么我可以使用的吗?
答案 0 :(得分:0)
假设input.csv
包含(包含标签):
"123" 123 """123"""
您可以在没有CSV库的情况下解析它,如下所示:
def remove_quotes(cell):
no_quotes = cell.strip('"')
length_diff = len(cell) - len(no_quotes)
if length_diff == 0:
try:
return (int(cell), False)
except ValueError:
return (cell, False)
elif length_diff == 2:
try:
return (int(no_quotes), True)
except ValueError:
return (cell, True)
else:
return (no_quotes, True)
以open('input.csv')作为f_input: 对于f_input中的行: line = [remove_quotes(cell)for line.strip()。split('\ t')] 打印(行)
这将打印:
[(123, True), (123, False), ('123', True)]
remove_quotes()
函数删除任何引号并检测任何长度更改并相应地创建所需的元组。