如何在Python中解析没有分隔符的CSV文件?

gc0ot86w  于 2023-05-11  发布在  Python
关注(0)|答案(4)|浏览(118)

我的CSV文件解密后没有任何分隔符,所有数据都在引号内。
CSV文件数据示例:

"text""1""0.2""true"
"text""1""0.2""true"
wmvff8tz

wmvff8tz1#

试着去掉第一个和最后一个字符,然后使用“”作为分隔符
假设将字符串读入csvstr

#              ,-- strips off the first and last character
#              |            ,-- the separator
items = csvstr[1:-1].split('""')

项目现在将包含列表

oug3syen

oug3syen2#

只要你的列总是加引号,你就可以把一个引号或两个连续的引号当作一个分隔符,然后去掉前面和后面的空列:

pd.read_csv("foo.csv", delimiter='""?', header=None, engine='python')\
  .dropna(axis=1)
#      1  2    3     4
#0  text  1  0.2  True
#1  text  1  0.2  True
agxfikkp

agxfikkp3#

如果输入是完全一致的(值中永远不会有双引号),那么您所需要做的就是通过流编辑器(即例如sed),并将所有""替换为",",将其转换为CSV文件。

sed -e's/""/","/g' input.file > csv.file
vbopmzt1

vbopmzt14#

也许有点超出范围,但你可以编写自己的解析器:

from parsimonious.grammar import Grammar
from parsimonious.nodes import NodeVisitor

data = """

"text""1""0.2""true"
"text""1""0.2""true"

"""

class MyWannabeCSV(NodeVisitor):
    grammar = Grammar(
        r"""
        content     = line+
        line        = nl? field+ nl?
        field       = sep value sep
        value       = ~r'[^"]+'
        sep         = '"'

        nl          = ~'\n+'
        """
    )

    def visit_line(self, node, visited_children):
        _, fields, _ = visited_children
        return fields

    def visit_field(self, node, visited_children):
        _, value, _ = visited_children
        return value.text

    def generic_visit(self, node, visited_children):
        return visited_children or node


my_csv = MyWannabeCSV()
fields = my_csv.parse(data)
print(fields)

这将产生

[['text', '1', '0.2', 'true'], ['text', '1', '0.2', 'true']]

相关问题