Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用命名元组输出特定数据_Python_Python 3.x_Namedtuple - Fatal编程技术网

Python 使用命名元组输出特定数据

Python 使用命名元组输出特定数据,python,python-3.x,namedtuple,Python,Python 3.x,Namedtuple,我在初始化数据时遇到了一些问题,因此我可以通过它们的键调用特定的值 这是我目前的代码: from kafka import KafkaConsumer import ast from collections import namedtuple import json import csv import sys from datetime import datetime import os # connect to kafka topic kaf = KafkaConsumer('kafka.t

我在初始化数据时遇到了一些问题,因此我可以通过它们的键调用特定的值

这是我目前的代码:

from kafka import KafkaConsumer
import ast
from collections import namedtuple
import json
import csv
import sys
from datetime import datetime
import os

# connect to kafka topic
kaf = KafkaConsumer('kafka.topic',
                   auto_offset_reset='earliest', bootstrap_servers=['consumer-kafka.server'])
outputfile = 'C:\\Users\\Documents\\KafkaConsum\\file.csv'

outfile = open(outputfile, mode='w', newline='')

for row in kaf:
    a = row.value.decode("utf-8")
        if "TAG_NAME" in a:
            print(a)
            outfile.write(a + '\n')
以下是我的数据的格式:

2018-12-04 13:27:12511[a-1 app=helloname,receiverId=abc-abc-123-123,partner=company]INFO kafka.consumer.topic标记_NAME Type='Generic App'Class=UpdateCheck description=Version1 appName=TWITTER appAction=start

2018-12-04 13:27:12511[a-1 app=helloname,receiverId=abc-abc-123-123,partner=company]INFO kafka.consumer.topic标记_NAME Type='Generic App'Class=UpdateCheck description=Version1 appName=TWITTER appAction=start

我希望能够解析这些数据,使其在我的csv文件中看起来像这样:

应用程序|收款人|合伙人|类型|类别|说明|应用程序名称| 惊吓|

helloname | abc-abc-123-123 |公司|通用应用程序|更新检查| 版本1 |推特|开始|

helloname | abc-abc-123-123 |公司|通用应用程序|更新检查| 版本1 |推特|开始|


正如Medali所说,您可以使用正则表达式获取所需的数据并将其正确分离。沿着……的路线的东西

import re

pattern = r'app=(.*?),'
app = re.search(pattern, a).group(1)
实际上,您可以有一个所需标题的列表,并通过模式创建for循环,将其保存在字典中,然后将其直接写入csv

您需要一个新的变量csv_outfile或类似的文件,并更改打开的变量

headers = ['app', 'receiverid', .... , 'appAction']
outfile = open(outputfile, mode='wb')
csv_outfile = csv.DictWriter(outfile, headers, delimiter = '|')
csv_outfile.writeheader()


for header in headers:
    pattern = header + r'=(.*?),'
    my_dict[header] = re.search(pattern, a).group(1)
csv_outfile.writerow(my_dict)

我认为这回答了您的问题。

这里有一个解决方案,但它不使用csv,可能应该这样做

它获取findall中的头和值。。。然后在下面,它将标头与由=符号分隔的值分开,并只写入一次标头和所有值

import re

def main():
    header = True
    fin = open('f3.txt', 'r')
    for line in fin:
        data = re.findall(r'\w+=\s*[\'"]?[\w-]+', line)
        headers = []
        array = []
        for pair in data:
            m = re.search(r'(\w+)=\s*[\'"]?([\w-]+)', pair)
            headers.append(m.group(1)) # get header
            array.append(m.group(2))   # get value

        if header == True:
            print('|'.join(headers))
            header = False
        print('|'.join(array))
    fin.close()

main()
这产生了以下输出:

app|receiverId|partner|Type|Class|description|appName|appAction
helloname|abc-abc-123-123|company|Generic|UpdateCheck|Version1|TWITTER|start
helloname|abc-abc-123-123|company|Generic|UpdateCheck|Version1|TWITTER|start

您可以使用正则表达式从我尝试使用的每一行示例中提取数据,但我不断得到错误AttributeError:“NoneType”对象没有属性“group”和TypeError:Unhabable type:“list”。我确实做了一些修改,例如添加my_dict={}和my_dict[headers]=re.searchpattern,stra.group1AttributeError:'NoneType'对象没有属性'group'表示您没有从搜索中获得任何结果,请确保header是正确的。你知道TypeError在哪里吗:不可损坏的类型:“列表”。是从密码里来的吗?