【问题标题】:Python using re module to parse an imported text filePython使用re模块解析导入的文本文件
【发布时间】:2013-02-12 19:32:56
【问题描述】:
def regexread():
    import re

    result = ''
    savefileagain = open('sliceeverfile3.txt','w')

    #text=open('emeverslicefile4.txt','r')
    text='09,11,14,34,44,10,11,  27886637,    0\n561, Tue, 5,Feb,2013, 06,25,31,40,45,06,07,  19070109,    0\n560, Fri, 1,Feb,2013, 05,21,34,37,38,01,06,  13063500,    0\n559, Tue,29,Jan,2013,'

    pattern='\d\d,\d\d,\d\d,\d\d,\d\d,\d\d,\d\d'
    #with open('emeverslicefile4.txt') as text:     
    f = re.findall(pattern,text)

    for item in f:
        print(item)

    savefileagain.write(item)
    #savefileagain.close()

上面写的函数解析文本并返回七个数字的集合。我有三个问题。

  1. 首先,包含与 text='09,...etc' 完全相同的文本的“读取”文件返回一个TypeError expected string or buffer,即使阅读一些帖子我也无法解决。
  2. 其次,当我尝试将结果写入“写入”文件时,没有返回任何内容,并且
  3. 第三,我不确定如何获得与 print 语句相同的输出,即三行七个数字,每行是我想要的输出。

这是我第一次使用正则表达式,所以请温柔!

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

    这应该可以解决问题,检查 cmets 以了解我在这里做什么 =) 祝你好运

    import re
    filename = 'sliceeverfile3.txt'
    pattern  = '\d\d,\d\d,\d\d,\d\d,\d\d,\d\d,\d\d'
    new_file = []
    
    # Make sure file gets closed after being iterated
    with open(filename, 'r') as f:
       # Read the file contents and generate a list with each line
       lines = f.readlines()
    
    # Iterate each line
    for line in lines:
    
        # Regex applied to each line 
        match = re.search(pattern, line)
        if match:
            # Make sure to add \n to display correctly when we write it back
            new_line = match.group() + '\n'
            print new_line
            new_file.append(new_line)
    
    with open(filename, 'w') as f:
         # go to start of file
         f.seek(0)
         # actually write the lines
         f.writelines(new_file)
    

    【讨论】:

    • 谢谢。这仅返回一行数字 09,11,14,34,44,10,11。也许我做错了缩进?我正在读取的文件如下 N1,N2,N3,N4,N5,L1,L2, Jackpot, Wins\n562, Fri, 8,Feb,2013, 09,11,14,34,44,10, 11, 27886637, 0\n561, Tue, 5,Feb,2013, 06,25,31,40,45,06,07, 19070109, 0\n560, Fri, 1,Feb,2013, 05,21,34, 37,38,01,06, 13063500, 0\n559, Tue,29,Jan,2013, 09,16,26,36,39,02,06, 6431250, 2\n558, Fri,25,Jan,2013, 03,10,18,31,37,02,04, 37772357, 1\n557, Tue,22,Jan,2013, 感谢您的帮助。
    • for line in lines: # 正则表达式应用于每一行 match = re.findall(pattern, line) if match: # 写回时确保添加 \n 以正确显示 #new_line = match.group() + '\n' print (match) new_file.append(match) lines = f.readlines() 我把它改成了这里的脚本,它似乎可以工作。我认为该文件只是一个连续的“句子”,而不是文本编辑器中显示的单独行??
    • 修复了这个问题,我并没有真正测试代码。我放了 f.write 而不是 f.writelines,这是在文件中写入字符串列表的正确方法。它只会将匹配的数字写入文件。如果您需要不同的输出,则修改 new_line 内容,使其反映在最终名称中。另外我建议使用另一个文件名作为输出文件,最好保留原件;)
    【解决方案2】:

    你走在正确的轨道上......

    您将遍历该文件: How to iterate over the file in python

    并将正则表达式应用于每一行。当您意识到您正在尝试编写在该循环之外不存在的“项目”时,上面的链接应该真正回答您的所有 3 个问题。

    【讨论】:

      猜你喜欢
      • 2013-08-22
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-25
      • 1970-01-01
      相关资源
      最近更新 更多