0

啊!我是 Python 新手。试图在这里获得模式,但可以使用一些帮助来解除阻塞。

设想:

  • testZip.ziptest.rpt里面有文件的文件
  • .rpt 文件有多个要解析的感兴趣区域(“AOI”)
  • AOI1:以$$
  • AOI2:以单行开头的多行$

目标:

  • 将 AOI 转换为表格格式以上传到 SQL

示例文件:

$$ADD ID=TEST BATCHID='YEP' PASSWORD=NOPE
###########################################################################################
$KEY= 9/21/2020 3:53:55 PM/2002/B0/295.30/305.30/4FAOA973_3.0_v2.19.2.0_20150203_1/20201002110149
$TIMESTAMP= 20201002110149
$MORECOLUMNS=  more columns
$YETMORE = yay

到目前为止尝试过:

import zipfile

def get_aoi1(zip):
    z = zipfile.ZipFile(zip)
    for f in z.namelist():
        with z.open(f, 'r') as rptf:
            for l in rptf.readlines():
                if l.find(b"$$") != -1:
                    return l

def get_aoi2(zip):
    z = zipfile.ZipFile(zip)
    for f in z.namelist():
        with z.open(f, 'r') as rptf:
            for l in rptf.readlines():
                if l.find(b"$") != -1:
                    return l


aoi1 = get_aoi1('testZip.zip')
aoi2 = get_aoi2('testZip.zip')

print(aoi1)
print(aoi2)

结果:

  • 我对这两个函数都得到了相同的结果
b"$$ADD ID=TEST BATCHID='YEP' PASSWORD=NOPE\r\n"
b"$$ADD ID=TEST BATCHID='YEP' PASSWORD=NOPE\r\n"

如何以文本而不是字节 ( b) 形式获取结果并删除\r\nfrom AOI1

  • 似乎没有r选择z.open()
  • 我一直不成功.strip()

编辑1:

  • 感谢@furas 的鼓励!
  • return l.strip().decode()为删除新行而工作b

如何从(表格格式AOI2的单行)获得正确的结果?$

编辑2:

  • @furas 2021!
  • 将以下逻辑添加到aoi2函数中效果很好。
col_array = []
    for l in rptf.readlines():
        if not l.startswith(b"$$") and l.startswith(b"$"):
            col_array.append(l)
    return col_array
4

0 回答 0