Python在模式后将所有内容转换为小写

Python在模式后将所有内容转换为小写,python,regex,Python,Regex,我有一个包含以下格式的文件。一切都由分隔

我有一个包含以下格式的文件。一切都由
分隔;;分隔的

audio.wav;2869.52;2870.55;;;Maar dishierdie Mense
audio1.wav;2925.32;2926.77;;;van die Padwerkers Wat
如何将
;;之后的所有内容小写因此输出文件是

audio.wav;2869.52;2870.55;;;maar dishierdie mense
audio1.wav;2925.32;2926.77;;;van die padwerkers wat
到目前为止我有

import re

with open(filename, 'r') as txtfile:
        data = txtfile.read()
        re.sub(r"", lambda m: m.group().lower(), data)

这会奏效的

fin = open("file.txt")
fout = open("output.txt", "wt")
for line in fin:
    before, after = line.split(';;;')
    fout.write(before + ';;;' + after.lower())
fin.close()
fout.close()
这里是output.txt

audio.wav;2869.52;2870.55;;;maar dishierdie mense
audio1.wav;2925.32;2926.77;;;van die padwerkers wat
这是一种方法

Ex:

import re

data = """audio.wav;2869.52;2870.55;;;Maar dishierdie Mense
audio1.wav;2925.32;2926.77;;;van die Padwerkers Wat"""

data = re.sub(r";;;(.+)", lambda x: x.group().lower(), data)
print(data)
audio.wav;2869.52;2870.55;;;maar dishierdie mense
audio1.wav;2925.32;2926.77;;;van die padwerkers wat
输出:

import re

data = """audio.wav;2869.52;2870.55;;;Maar dishierdie Mense
audio1.wav;2925.32;2926.77;;;van die Padwerkers Wat"""

data = re.sub(r";;;(.+)", lambda x: x.group().lower(), data)
print(data)
audio.wav;2869.52;2870.55;;;maar dishierdie mense
audio1.wav;2925.32;2926.77;;;van die padwerkers wat

使用
rsplit
,您可以执行以下操作:

记录=[
“audio.wav;2869.52;2870.55;;;Maar dishierdie Mense”,
“audio1.wav;2925.32;2926.77;;van die Padwerkers Wat”,
]
标准化=[
line.rsplit(“;”,1)[0]+“;”+line.rsplit(“;”,1)[1]。lower()
用于行内记录
]
使用带lookback的正则表达式:

重新导入
标准化=[

re.sub(r)(?您可以合并如下内容:

temp_string='audio1.wav;2925.32;2926.77;;van die Padwerkers Wat'
temp_string=temp_string.split(“;;”)
“;;”。联接([temp_字符串[0],temp_字符串[1]。lower())
产出:

'audio1.wav;2925.32;2926.77;;;van die padwerkers wat'

对于每一行,您都可以使用字符串查找“;;”的位置。查找(…)并根据此位置将字符串拆分为两个不同的部分:

line[:line.find(";;;")]+line[line.find(";;;"):].lower())
它是如何工作的?让我们写一个例子

音频.wav;2869.52;2870.55;;Maar dishierdie月经

  • string[:position]
    返回从字符串开头到位置的子字符串,因此
    line[:line.find(;;;;”)
    返回“audio.wav;2869.52;2870.55”
  • string[position::
    返回从位置到字符串末尾的子字符串,因此行[line.find(;;;):]返回“;;Maar dishierdie Mense”。如果使用
    .lower()
音频.wav;2869.52;2870.55;;maar dishierdie月经


假设每条记录占用一行

如果名称=“\uuuuu main\uuuuuuuu”:
filename=“您的文件名”
将open(filename,'r')作为f:
buf=[]
对于idx,枚举中的n(f.readlines()):
sep=n.split(“;;”)
如果len(sep)!=2:
引发异常(f“第{idx}行的格式错误”)
buf.append(sep[0]+';;'+sep[1].lower())
将open(filename,'w')作为f:
f、 书写线(buf)