pythonでregex groupを使って行の一部だけを取得するには? 私は1行に1つのエントリのデータベースを持っていて、行の始めに月と日のデータに従ってそれをファイルに分割したいが、最初の21文字を含まない行だけを出力したい。ここ は、データベースの迅速なサンプルです:Pythonでregex groupを使って行の一部だけを取得するには?
01-01-1989-06:30:00| Stefan Reinartz; 1.1.1989; 06:30; +01; Engelskirchen,Germany; 50n59; 7e24; M;
01-01-1996-08:40:00| Dawid Kwiatkowski; 1.1.1996; 08:40; +01; Gorzów Wielkopolski,Poland; 52n44; 15e15; M;
01-01-2001-01:30:00| Liam Flockhart; 1.1.2001; 01:30; -08; San Diego,California; 32n43; 117w09; M;
01-02-1467-00:20:00| King of Poland Sigismund I the Old; 2.1.1467; 00:20; +00:21:33; Kozienice,Poland; 51n35; 21e33; M;
01-02-1746-09:00:00| Duke of Rambouillet Louis Marie; 2.1.1746; 09:00; -00:03:41; Madrid,Spain; 40n24; 3w41; M;
01-02-1784-01:00:00| Duke of Saxe-Coburg and Gotha Ernst I; 2.1.1784; 01:00; +00:10:58; Coburg,Germany; 50n15; 10e58; M;
所望の出力ファイル01-01.zbs:
Stefan Reinartz; 1.1.1989; 06:30; +01; Engelskirchen,Germany; 50n59; 7e24; M;
Dawid Kwiatkowski; 1.1.1996; 08:40; +01; Gorzów Wielkopolski,Poland; 52n44; 15e15; M;
Liam Flockhart; 1.1.2001; 01:30; -08; San Diego,California; 32n43; 117w09; M;
出力ファイル01-02.zbs:
King of Poland Sigismund I the Old; 2.1.1467; 00:20; +00:21:33; Kozienice,Poland; 51n35; 21e33; M;
Duke of Rambouillet Louis Marie; 2.1.1746; 09:00; -00:03:41; Madrid,Spain; 40n24; 3w41; M;
Duke of Saxe-Coburg and Gotha Ernst I; 2.1.1784; 01:00; +00:10:58; Coburg,Germany; 50n15; 10e58; M;
私が使用しましたその年の毎日ごとにソートし、それに応じてファイルを分割することができます。グループを使用する方法、
re.search("^[0-9]{2}-[0-9]{2}-[0-9]{4}-[0-9]{2}:[0-9]{2}:[0-9]{2}| (.*)",line[0])
re.search("^.{21}(.*)",line[0])
に
しかし、\ 1:しかし、私はこれを行うために正規表現グループを使用しようとしていますので、このように、出力に各行の最初の21個の文字を望んでいません(*)。その部分だけを出力しますか? 正規表現でもこれを行う必要がありますか?ここでは、全体のコードです:コードは、おそらくかなり間違っているので、私は、Pythonに非常に初心者です:
import re
with open("database.txt") as f:
pstring='' #previous line string beginning
astring='' #actual line string beginning
try:
out = open(re.search("^[0-9]{2}-[0-9]{2}",line[0]) + ".zbs", "w")
for line in f:
astring = re.search("^[0-9]{2}-[0-9]{2}-",line[0])
if not pstring = astring:
out.write(line)
pstring = re.search("^[0-9]{2}-[0-9]{2}-",line[0])
if out: out.close()
out = open(re.search("^[0-9]{2}-[0-9]{2}",line[0]) + ".zbs", "w")
else:
pstring = re.search("^[0-9]{2}-[0-9]{2}-",line[0])
out.write(line)
finally:
out.close()
よろしく。
希望する出力は何ですか? – Ajax1234
同じ行に対して同じre.searchを繰り返し実行することがわかります。結果を変数に格納し、その変数を代わりに使用することを検討することもできます。 –
最初のファイルは、withステートメントを使用して開きます。ただし、2番目のファイルでは、withステートメントは使用しません。したがって、ファイルを自分で閉じる必要があります。残念ながら、close()コマンドは失敗し、エラーメッセージは実際のエラーを記述しようとしていたメッセージをマスクします。 –