2013-02-12 224 views
3
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() 

上面的函数用于解析文本并返回七个数字组。我有三个问题。Python使用re模块解析导入的文本文件

  1. 首先在“读”文件,其中包含完全相同的文本作为= '09 ...等”返回TypeError expected string or buffer,我不能阅读一些职位甚至解决。其次,当我尝试将结果写入“写入”文件时,没有任何返回信息,第三,我不知道如何获得与print语句获得的输出相同的输出结果,它是三行每个七个数字是我想要的输出。

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

回答

8

这应该做的伎俩,检查说明什么Im做这里=评论) 好运

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) 
+0

谢谢。这只返回一行数字09,11,14,34,44,10,11。也许我错误地完成了缩进?我正在阅读的文件如下N1,N2,N3,N4,N5,L1,L2,Jackpot,Wins \ n562,Fri,2013年2月8日,09,11,14,34,44,10, 2013年2月5日星期二,06,25,31,40,45,06,07,19070109,0560,2013年2月1日,星期五,05,21,34, 37,38,01,06,13063500,01555,2013年1月29日,星期二,09,16,26,36,39,02,06,643,1250,2155,2013年1月25日,星期五, 03,10,18,31,37,02,04,37772357,1 \ n557,2013年1月22日,星期二,感谢您的帮助。 – user1478335 2013-02-13 09:54:51

+0

用于行的行: #正则表达式应用到每个行 匹配= re.findall(图案,线) 如果匹配: #确保添加\ n至正确显示时,我们把它写回 #new_line =匹配.group()+'\ n' print(match) new_file.append(match) lines = f.readlines()我把它改成了这里的脚本,这似乎工作。我认为该文件只是一个连续的“句子”,不会像文本编辑器中出现的那样分隔线条? – user1478335 2013-02-13 10:10:29

+0

解决了这个问题,我没有真正测试代码。我把f.write而不是f.writelines这是在文件中写入字符串列表的正确方法。 它只会将相应的编号写入文件。如果你需要不同的输出,那么修改new_line的内容,使其反映在最终名称中。 另外我会建议使用另一个文件名输出文件,它更好地保留原件;) – OmegaOuter 2013-02-13 23:59:05

0

你在正确的轨道上是有点......

你会遍历文件: How to iterate over the file in python

和正则表达式应用到每一行。当你意识到你正在尝试编写'item'时,上面的链接应该真正回答你所有的3个问题。