Python 使用正则表达式逐行搜索纯文本文件,并根据匹配项选择行

Python 使用正则表达式逐行搜索纯文本文件,并根据匹配项选择行,python,regex,format,Python,Regex,Format,我试着逐行读取一个纯文本文件,选择以任意六位数字的模式开头的行。将它们传递到列表,然后将该列表逐行写入.csv文件 下面是我试图在文件中匹配的一行的示例: **000003** ANW2248_08_DESOLATE-WASTELAND-3. A9 C 00:55:25:17 00:55:47:12 10:00:00:00 10:00:21:20 下面是两幅图像的链接,其中一幅在文件其余部分的上下文中显示上述行以及预期结果: 预期的结果是读者找到一行,使用正则表达式进行搜

我试着逐行读取一个纯文本文件,选择以任意六位数字的模式开头的行。将它们传递到列表,然后将该列表逐行写入.csv文件

下面是我试图在文件中匹配的一行的示例:

**000003**  ANW2248_08_DESOLATE-WASTELAND-3. A9    C        00:55:25:17 00:55:47:12 10:00:00:00 10:00:21:20
下面是两幅图像的链接,其中一幅在文件其余部分的上下文中显示上述行以及预期结果:

预期的结果是读者找到一行,使用正则表达式进行搜索,然后如果搜索结果在开头找到6个数字的序列,它会将整行追加到匹配的行列表中

实际上,我得到的是,一旦我将reader读取的内容写入.csv文件,它只选择了[],因此正则表达式搜索显然无法以我编写此代码的方式正常运行。任何关于如何更好地形成它以实现我试图做的事情的提示都将不胜感激


谢谢。

更多的预期输入/输出示例将更好地帮助解决此问题,但从我所看到的情况来看,您正在尝试将包含时间戳的文本文件中的每一行写入csv。在这种情况下,这里有一些可能帮助您解决问题的psuedo代码,以及一个单独的正则表达式匹配函数,使您的代码更具可读性


进口稀土
def匹配时间(行):
pattern=re.compile(r'(?:\d+[:]\d+[:]\d+[:]\d+'))
结果=模式.findall(行)
返回“”连接(结果)
如果找到匹配项,这将返回整个时间码字符串


行=[]
将open('yourfile','r')作为txtfile:
将open('yourfile','w')作为csvfile:
对于txtfile中的行:
res=匹配线(线)
#或者,您可以测试res是否符合要求,哪种可能更好
如果res!="":
行。追加(行)
对于行中的项目:
csvfile.write(行)

打开文本文件进行读取,如果该行包含时间码,则将该行附加到列表中,然后迭代该列表并将该行写入csv。

更多预期输入/输出的示例将更好地帮助解决此问题,但从我所看到的情况来看,您正在尝试将包含时间戳的文本文件中的每一行写入csv。在这种情况下,这里有一些可能帮助您解决问题的psuedo代码,以及一个单独的正则表达式匹配函数,使您的代码更具可读性


进口稀土
def匹配时间(行):
pattern=re.compile(r'(?:\d+[:]\d+[:]\d+[:]\d+'))
结果=模式.findall(行)
返回“”连接(结果)
如果找到匹配项,这将返回整个时间码字符串


行=[]
将open('yourfile','r')作为txtfile:
将open('yourfile','w')作为csvfile:
对于txtfile中的行:
res=匹配线(线)
#或者,您可以测试res是否符合要求,哪种可能更好
如果res!="":
行。追加(行)
对于行中的项目:
csvfile.write(行)

打开文本文件进行读取,如果该行包含时间码,则将该行附加到列表中,然后迭代该列表并将该行写入csv。

请详细说明示例行的特征,以将其限定为匹配项?基本上,我使用的正则表达式在时间戳中具有特定模式“00:00:00”的匹配项,在示例中读作'00:55:25:17 00:55:47:12'等等。请您详细说明您的示例行的特征,以将其限定为匹配?基本上,我使用的正则表达式在时间戳中具有特定模式'00:00:00',在示例中读作'00:55:25:17 00:55:47:12'等等。您好,谢谢你的评论。我对这段代码进行了一番尝试,但不幸的是,它挑出了一行实际上与正则表达式不匹配的代码,然后简单地将其添加到原始文件中的行数中。我也不是100%理解你所说的交替使用“testif res in line”的意思,代码中的所有行似乎都是必需的?再次感谢你!你好,谢谢你的评论。我对这段代码进行了一番尝试,但不幸的是,它挑出了一行实际上与正则表达式不匹配的代码,然后简单地将其添加到原始文件中的行数中。我也不是100%理解你所说的交替使用“testif res in line”的意思,代码中的所有行似乎都是必需的?再次感谢你!
import csv
identifier = re.compile(r'^(\d\d\d\d\d\d)')

matched_line = []
with open('file.edl', 'r') as file:
    reader = csv.reader(file)
    for line in reader:
        line = str(line)
        if identifier.search(line) == True:
            matched_line.append(line)
        else: continue

with open('file.csv', 'w') as outputEDL:
    print('Copying EDL contents into .csv file for reformatting...')
    outputEDL.write(str(matched_line))