将多行数据作为单个项读取

2024-05-15 01:05:47 发布

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

我有一组来自这样一个文件的数据

"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,\
      00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
      77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,\
      00,2e,00,77,00,61,00,76,00,ff,00

"johnnyboy"="gotwastedatthehouse"

"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,\
      00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
      77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,\
      00,2e,00,77,00,61,00,76,00,ff,00


[mattplayhouse\wherecanwego\tothepoolhall]

如何阅读/引用“johnnyboy”=splice(23)作为单行的文本:

"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,00,2e,00,77,00,61,00,76,00,ff,00

我目前正在基于splice(23)匹配正则表达式:搜索如下:

re_johnny = re.compile('splice')
with open("file.txt", 'r') as file:
    read = file.readlines()
    for line in read:
        if re_johnny.match(line):
            print(line)

我想我需要取和删除反斜线和空间来合并这些线,但是我不熟悉如何去做,而不是获取空白线或不象我的正则表达式的新行。在尝试第一次解决方案时,我的最后一行被不适当地拉了出来。任何帮助都会很好。你知道吗


Tags: 文件数据rereadlinedda3file
2条回答

输入文件:fin

"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,\
      00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
      77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,\
      00,2e,00,77,00,61,00,76,00,ff,00

"johnnyboy"="gotwastedatthehouse"

"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,\
      00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,\
      77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,\
      00,2e,00,77,00,61,00,76,00,ff,00


[mattplayhouse\wherecanwego\tothepoolhall]

除了提格霍克的建议之外,你还可以尝试以下方法:

代码:

import re

with open('fin', 'r') as f:
    for l in [''.join([b.strip('\\') for b in a.split()]) for a in f.read().split('\n\n')]:
        if 'splice' in l:
            print(l)

输出:

"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,00,2e,00,77,00,61,00,76,00,ff,00
"johnnyboy"=splice(23):15,00,30,00,31,00,32,02,39,00,62,00,a3,00,33,00,2d,0f,39,00,00,5c,00,6d,00,65,00,64,00,69,00,61,00,5c,00,57,00,69,00,6e,00,64,00,6f,00,77,00,73,00,20,00,41,00,61,00,63,00,6b,00,65,aa,72,00,6f,00,75,00,6e,dd,64,00,2e,00,77,00,61,00,76,00,ff,00

使用regex,您的问题成倍增加。相反,保持简单:

  • 如果一行以"开头,它就以一条记录开头。你知道吗
  • 否则,将其附加到上一条记录。你知道吗

在Python中,只需几行就可以实现对这样一个方案的解析。你不需要正则表达式。你知道吗

相关问题 更多 >

    热门问题