python - csv.DictReader 分隔符在带有多个引号的 csv 字段中
问题描述
我有以下示例 csv,我正在阅读:
f = StringIO(response.encode('utf-8'))
reader = csv.DictReader(f, quotechar='"', delimiter=';', quoting=csv.QUOTE_ALL, skipinitialspace=True)
示例 .csv:
id;name;community;owner;owns;description;uuid
3c;NP;NoProb;NoP;Text;text_with_no_issues;
3c;NP;NoProb;NoP;TextText;text_with_no_issues2;
1A;fooo;barr;Bar;TEXT1;"\"text\"\"None\"\";text\"\"TEXT\"\"text\"";
1A;fooo;barr;Bar;TEXT2;"\"text\"\"None\"\";text\"\"TEXT\"\"text\"";
2B;BAR;foo;Bar;TEXT3;"\"text\"\"None\"\";text\"\"TEXT\"\"text\";text\"\"TEXT\"\"text\"";
2B;BAR;foo;Bar;TEXT4;"\"text\"\"None\"\";text\"\"TEXT\"\"text\";text\"\"TEXT\"\"text\"";
uuid 列在所有情况下都是空的。在“阅读器”中有多个具有相同“名称”和“ID”的条目,我正在“合并”,但在最后四个(1A,2B)这样的行中,由于“;”,我遇到了一个问题 描述中的分隔符。
即使使用 quotechar='"' 和 quoting=csv.QUOTE_ALL,描述列也会被分隔符吐出并转到下一列 (uuid) 和损坏我的数据的“无”列。
知道如何解决这个问题吗?
PS 对于合并逻辑,我使用了两种变体:
##############################################################
name_index = []
result = []
for line in reader:
idx = line["name"]
if idx not in name_index:
name_index.append(idx)
result.append(line)
else:
idx_curr_dict = result[name_index.index(idx)]
merge_entries = [idx_curr_dict, line]
placeholder = {}
for key in idx_curr_dict:
placeholder[key] = ", ".join(list(set(d[key] for d in merge_entries if d[key] != "" and d[key])))
result[name_index.index(idx)] = placeholder
##############################################################
和一个有点慢,但不是那么复杂:
##############################################################
data = [line for line in reply] # Deplete the iterator
unique_names = set([line['name'] for line in data]) # List of unique names
column_names = [key for key in data[0] if key != 'name' and key != 'uuid'] # all other useful columns
result = []
for name in unique_names:
same_named_lines = [line for line in data if line['name'] == name]
unique_line = {'name': name}
for column in column_names:
value = ", ".join(set([line[column] for line in same_named_lines]))
unique_line[column] = value
result.append(unique_line)
##############################################################
提前非常感谢!
解决方案
推荐阅读
- ios - 标签未固定在表格视图单元格的右侧
- angular - Angular/Typescript:只读修饰符不起作用
- apache-spark - PySpark 窗口结束:有没有更好的方法来查找两列分区的行号
- java - 具有多个文件附加器的 Log4j2 json 配置
- aframe - 为自定义组件中的自定义属性设置动画
- javascript - 导航 json 文件以创建 jquery 自动完成所需的数组
- csv - 创建 Apache poi Workbook 时出现 Java 堆空间问题
- java - POS Hypercom Terminal T4230 使用 Java 串行端口通信的集成问题
- python - 将时间戳转换为 datetime.time python
- regex - 正则表达式与分支名称不匹配