在python中从string对象读取逗号分隔值

2024-09-30 03:25:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有来自http请求的输出,它是字符串类型,但数据像csv。因为我的请求头中的输出类型是csv('Accept':“application/csv”)。因此来源。但是响应内容类型是字符串。 res=request.contenttype(res)`给我字符串。在

以下是对象(res)的示例输出:

QueryTime
start,end
144488,144490

Data

Data - AData
id,G_id,name,type,time,sid,channel
23,-1,"B1",type1,144488,11,CH23
23,-1,"B1",type1,144488,11,CH23
Data - BData
id,G_id,time,se
23,-1,144488,undefined
23,-1,144488,undefined

如果您看到数据以csv的形式存在,并且有多个表,就像您看到的“AData”和“BData” 我不知道该用什么方法来读这篇文章。我试过csv模块,但没有帮助。 我试过了dict.csv改变但又是一样的。没有得到期望的输出。 可能是我做错了什么,因为我刚开始接触python。 需要从输出对象读取每个表。在

^{pr2}$

请专家指导:-)


Tags: csv数据对象字符串id类型datatime
2条回答

您可以使用正则表达式预解析输出以提取各个部分,然后使用StringIO将每个部分解析为csv.reader,如下所示:

import csv
import StringIO
from collections import OrderedDict

output = """
QueryTime
start,end
144488,144490

Data

Data - AData
id,G_id,name,type,time,sid,channel
23,-1,"B1",type1,144488,11,CH23
23,-1,"B1",type1,144488,11,CH23
Data - BData
id,G_id,time,se
23,-1,144488,undefined
23,-1,144488,undefined"""

sections = ['QueryTime', 'Data - AData', 'Data - BData', 'Data']
re_sections = '|'.join([re.escape(s) for s in sections])
tables = re.split(r'(' + re_sections + ')', output)
tables = [t.strip() for t in tables[1:]]

d_tables = OrderedDict()

for section, table in zip(*[iter(tables)]*2):
    if len(table):
        csv_input = csv.reader(StringIO.StringIO(table))
        d_tables[section] = list(csv_input)

for section, entries in d_tables.items():
    print section
    print entries
    print

给出以下输出:

^{pr2}$

我想出了这个函数来解析数据:

def parse_data(data):
 parsed = {}
 current_section = None

 for line in data.split('\n'):
  line = line.strip()
  if line:
   if ',' in line:
    current_section.append(line.split(','))
   else:
    parsed[line] = []
    current_section = parsed[line]
 return parsed

它返回一个字典,其中每个键引用输入的一部分。它的值是一个列表,其中每个成员表示一行输入。每一行也是作为字符串的单个值的列表。它不专门处理节中的第一行。在

在您的输入上运行它会产生以下结果(为了可读性而重新格式化):

^{pr2}$

相关问题 更多 >

    热门问题