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()

上記の関数は、テキストを解析し、7 つの数値のセットを返します。3 つの問題があります。

  1. まず、 text='09,...etc' とまったく同じテキストを含む「読み取り」ファイルが を返しますTypeError expected string or buffer。これは、いくつかの投稿を読んでも解決できません。
  2. 次に、「書き込み」ファイルに結果を書き込もうとすると、何も返されず、
  3. 第 3 に、print ステートメントで取得したのと同じ出力を取得する方法がわかりません。これは、必要な出力である、それぞれ 7 つの数字の 3 行です。

正規表現を使うのはこれが初めてなので、お手柔らかにお願いします!

4

2 に答える 2

12

これでうまくいくはずです。ここで何をしているのかについての説明についてはコメントを確認してください=)頑張ってください

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)
于 2013-02-12T22:20:40.020 に答える
0

あなたは一種の正しい軌道に乗っています...

ファイルを反復処理します: How to iterate over the file in python

各行に正規表現を適用します。上記のリンクは、そのループの外には存在しない「アイテム」を書き込もうとしていることに気付いたときに、3 つの質問すべてに実際に答えるはずです。

于 2013-02-12T19:45:29.503 に答える