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)