python-去重复行,按行排序,文件名数字补成3位格式
使用python进行一些文件操作,其中用到的函数记录如下:
# 文件去除重复行
def remove_duplicates(path):
lines_seen = set()
outfile = open(f"{path}.out", 'a+', encoding='utf-8')
f = open(path, 'r', encoding='utf-8')
for line in f:
if line not in lines_seen:
outfile.write(line)
lines_seen.add(line)
outfile.close()
f.close()
# 将生成的临时文件覆盖到原文件上
shutil.move(f"{path}.out", path)
# 将一个文件中所有行进行按字母顺序排序
def sort_lines(path): list = [] with open(path, "r", encoding='utf-8') as file: for line in file: list.append(line.strip()) with open(f"{path}.out", "w", encoding='utf-8') as file: for item in sorted(list): file.writelines(item) file.writelines('\n') shutil.move(f"{path}.out", path)
# 将一行文字格式如:File: A2_23 叛乱 的 内部 和 外部 部分 已有 清华 图案 和 款 及 裁判 的 内 已有 佛手 产值 花纹 图案
# 转换成这样的格式:A2_023 叛乱的内部和外部部分已有清华图案和款及裁判的内已有佛手产值花纹图案
# 将得到的文本,再根据每行空格前的序号进行排序
def add_nums(path): with open(path, "r", encoding='utf-8') as file: for line in file.readlines(): #以空格分割,且只分割一次,即在第一个空格处一分为二,此处处理空格后的中文部分,将空格去掉 list_chinese = line.split(" ",1)[1:] while ' ' in list_chinese: list_chinese.remove(' ') #list格式转回字符串 line_chinese = "".join(list_chinese) #以空格分割,且只分割一次,即在第一个空格处一分为二,此处处理空格前的序号部分,将数字序号补成3位,便于后续排序 list_mark = line.split(" ",1)[:1] #取出下划线_后面的数字,并补充成3位标准数字 list_nums = "".join(list_mark).split("_")[1:] str_nums = "".join(list_nums).zfill(3) #取出下划线_前面的部分 list_alphabet = line.split("_")[:1] str_alphabet = "".join(list_alphabet) #重新组合下划线_前后部分,类似A2_000格式 line_mark = str_alphabet + "_" +str_nums #将序号和中文重新拼接起来,中间用空格隔开 final_line = line_mark + " " + line_chinese #将得到的结果先保存到临时文件找那个。a+ == a+r 表示可追加可写,文件若不存在就创建 with open(f"{path}.out", "a+", encoding='utf-8') as file: file.writelines(final_line) #将生成的临时文件.out文件覆盖到原文件上 shutil.move(f"{path}.out", path)
# 取出文件中的首行,并去除中间的空格
def get_correctTXT_pure(nums): path = './data/audio/' + nums with open(path, "r", encoding='utf-8') as file: for line in file.readlines()[:1]:
# 去除空格 line = line.replace(" ", "").replace("\n","")
return line
浙公网安备 33010602011771号