python正则表达式替换成不同内容_Python多个正则表达式替换

我是一个Python新手.

我一直在寻找,但发现我的观念只有一点点.

Windows上的Python 2.7(我选择了python,因为它是多平台,结果可以在Windows上移植).

我想创建一个脚本,在文件夹中搜索* .txt UTF-8文本文件,加载内容(一个文件在彼此之后),将非ascii字符更改为html权限,然后在开始时添加html标记并且在每一行的末尾,但是标签的两个变体,一个用于文件的头部,一个用于文件的尾部,其中(头尾)由空行分隔.之后,所有结果必须写入另一个文本文件,如* .htm.要视觉:

unicode1.txt:

űnícődé text line1

űnícődé text line2

[empty line]

űnícődé text line3

űnícődé text line4

结果必须在unicode1.htm中:

űnícődé text line1

űnícődé text line2

[empty line]

űnícődé text line3

űnícődé text line3

我开始开发我的解决方案的核心,但我坚持了下来.请参阅脚本版本(为简单起见,我选择使用xmlcharrefreplace进行编码).

V1:

import re, cgi, fileinput

file="_utf8.txt"

text=""

for line in fileinput.input(file, inplace=0):

line=cgi.escape(line.decode('utf8'),1).encode('ascii', 'xmlcharrefreplace')

line=re.sub(r"^", "

", line, 1)

text=text+re.sub(r"$", "

", line, 1)

print text

它工作得很好,但是对于这个任务来说,fileinput不是我认为可行的方式.

V2:

import re, cgi, codecs

file="_utf8.txt"

text=""

f=codecs.open(file, encoding='utf-8')

for line in f:

line=cgi.escape(line,1).encode('ascii', 'xmlcharrefreplace')

line=re.sub(r"^", "

", line, 1)

text=text+re.sub(r"$", "

", line, 1)

f.close()

print text

它搞砸了结果,在行开始时关闭标记替换第一个字母等.

V3(试过多行标志):

import re, cgi, codecs

file="_utf8.txt"

text=""

f=codecs.open(file, encoding='utf-8')

for line in f:

line=cgi.escape(line,1).encode('ascii', 'xmlcharrefreplace')

line=re.sub(r"^", "

", line, 1, flags=re.M)

text=text+re.sub(r"$", "

", line, 1, flags=re.M)

f.close()

print text

结果相同.

V4(试过1个正则表达式而不是2个):

import re, cgi, codecs

file="_utf8.txt"

text=""

f=codecs.open(file, encoding='utf-8')

for line in f:

line=cgi.escape(line,1).encode('ascii', 'xmlcharrefreplace')

text=text+re.sub(r"^(.*)$", r"

\1

", line, 1)

f.close()

print text

结果相同.请帮忙.

编辑:我刚用hexeditor检查结果文件,每个结束标记前都有一个x0D字节!为什么?

Edit2:更改为更合理的方法

text+=re.sub(r"^(.*)$", r"

\1

", line, 1)

编辑3:使用hexeditor我看到了混乱结果的原因:每个CRLF之前的额外CR(x0D)字节.

我追踪了CR的问题,是什么造成的:串联起来

# -*- coding: utf-8 -*-

text=""

f=u"unicode text line1\r\n unicode text line2"

for line in f:

text+=line

print text

这导致:

unicode text line1\r\r\n unicode text line2

任何想法,如何解决这个问题?

解决方法:

#!/usr/bin/env python

import cgi

import fileinput

import os

import shutil

import sys

def textfiles(rootdir, extensions=('.txt',)):

for dirpath, dirs, files in os.walk(rootdir):

for f in files:

if f.lower().endswith(extensions):

yield os.path.join(dirpath, f)

def htmlfiles(files):

for f in files:

root, _ = os.path.splitext(f)

newf = root + '.html'

shutil.copy2(f, newf)

yield newf

for line in fileinput.input(htmlfiles(textfiles(sys.argv[1])), inplace=True):

if fileinput.isfirstline():

klass = 'aaa' # start head part

line = cgi.escape(line.decode('utf-8').strip())

line = line.encode('ascii', 'xmlcharrefreplace')

if not line: # empty line

klass = 'bbb' # start tail part

print(line)

else:

print('

%s

' % (klass, line))

$python txt2html.py c:\root\dir

标签:python,regex,replace

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值