我的CSV文件解密后没有任何分隔符,所有数据都在引号内。CSV文件数据示例:
"text""1""0.2""true" "text""1""0.2""true"
wmvff8tz1#
试着去掉第一个和最后一个字符,然后使用“”作为分隔符假设将字符串读入csvstr
# ,-- strips off the first and last character # | ,-- the separator items = csvstr[1:-1].split('""')
项目现在将包含列表
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
agxfikkp3#
如果输入是完全一致的(值中永远不会有双引号),那么您所需要做的就是通过流编辑器(即例如sed),并将所有""替换为",",将其转换为CSV文件。
sed
""
","
sed -e's/""/","/g' input.file > csv.file
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']]
4条答案
按热度按时间wmvff8tz1#
试着去掉第一个和最后一个字符,然后使用“”作为分隔符
假设将字符串读入csvstr
项目现在将包含列表
oug3syen2#
只要你的列总是加引号,你就可以把一个引号或两个连续的引号当作一个分隔符,然后去掉前面和后面的空列:
agxfikkp3#
如果输入是完全一致的(值中永远不会有双引号),那么您所需要做的就是通过流编辑器(即例如
sed
),并将所有""
替换为","
,将其转换为CSV文件。vbopmzt14#
也许有点超出范围,但你可以编写自己的解析器:
这将产生