python - 如何在 Python 中解析双引号的 csv 文件?

标签 python python-3.x csv

我正在尝试解析用 "' 引用的 csv。 所以基本上文件看起来像这样:

"'test1'","'test2'","'test3'","'test4'"
"'value1'","'value2'",,"'value4'"

我尝试解析它如下:

import csv
from pprint import pprint

inputCsv = "test.csv"

with open(inputCsv, 'r', newline='') as csvfile:
    dictReader = csv.DictReader(csvfile, quotechar='"', delimiter=',',
                 quoting=csv.QUOTE_ALL, doublequote=True)
    for line in dictReader:
        pprint(line)
        # print(line["'test1'"]) # works, but only with "'test1'", not "test1" or 'test1'; also result is 'value1' not value1

我希望 key 是 test1 - 这样我就可以使用 line["test1"] 访问它(而不是 line["'test1'"]) 并且值为 value1,没有额外的引号。

如果不遍历整个字典并在解析后删除每个元素的引号,这是否可能?

在线示例: https://repl.it/repls/WoefulDeafeningMacroinstruction

最佳答案

您可以定义自己的阅读器以在 迭代期间解决问题(警告:未经测试的代码,但它至少应该让您入门):

class MyReader(csv.reader):
    def __next__(self):
        row = super().__next__()
        return [value.strip("'") for value in row]

class MyDictReader(csv.DictReader):
    def __init__(self, f, fieldnames=None, restkey=None, restval=None,
                 dialect="excel", *args, **kwds):
        super().__init__(f, fieldnames, restkey, restval, dialect, *args, *kwds)
        self.reader = MyReader(f, dialect, *args, **kwds)

关于python - 如何在 Python 中解析双引号的 csv 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56425240/

相关文章:

python - 从 python 向 Fortran 传递变量会导致错误值

python - 如何检查迭代变量是否为NavigableString或Tag类型?

node.js - 创建 CSV 文件时,标题值在每行中重复

c++ - Python 实现不适用于 C++ 中的相同逻辑

qt - 无法创建查询 COPY PostgreSQL PQSQL 驱动程序

csv - 在 Power BI 中导入 CSV 时防止小数点分隔符丢失

python - python 装饰器如何处理这段代码?

python - 从一个列表返回索引范围以从另一个列表获取值

python - 无法使用 pandas plot() 函数组合条形图和线图

multithreading - "RuntimeError: Calling Tcl from different appartment"tkinter 和线程