遍历两边,第一遍获取正确词头和跳转词头(@@@那种类型)放到一个字典里面,第二遍处理跳转词头和释义同一行的数据(LLAXXX<link…)从字典里面找到LLLAXXX对应的正确词头,写入词头,写入释义,写入分隔符。
playboy版可否分享下?
好的,谢谢大佬
谢谢大佬细致的回复,虽然不会phthon,但也启发了我,或许可以用数据库试试,将@@@link清除掉就能连起来了
应该是图片版的,其它的不是找不到就是,,你懂的
将文本做成一词条一行;
将LINK前后互换;
选择好排序;
查找词头相同的上下两行,并让替换时复制原词条(较长的一行吧)
若想保留原文本顺序,可以在每行前加上编号。
这样做的话应该所有mdx都可以用相同的操作,您有没有写过通用的程序代码可以分享一下?
看到您之前从mdx制作过Mac词典,应该有研究过这个
排序这一步,用什么工具好呢?
请问这么做的意义何在?
这应该是一个简便方案
一般确实没什么意义~
但有些情况有需要,像我后面说的,制作Mac词典,因为Mac词典常常用于三指取词,考虑变形很重要。从mdx转的Mac词典没有mdx的一些特性,需要手动处理link等情况。如果遇到多重引用更是麻烦。
(我也想问楼主这么做的意义何在)
大概写了个脚本,可惜是 js的,跑了下还行,python好久不用忘差不多了,可以请python大神出手看看
content = "\r\n" + content + "\r\n"; // 当前文本文件的完整内容
var myEntry = ""; // 一个词头
var myContent = ""; // 一条释义
while (content.match(/\r\n@@@LINK=.+\r\n/) != null) {
myEntry = content.match(/\r\n@@@LINK=.+\r\n/)[0];
myEntry = myEntry.replace(/@@@LINK=/g, '');
myEntry = myEntry.replace(/\r\n/g, '');
myContent = content.match(RegExp('\r\n' + myEntry + '\r\n.+\r\n', ''))[0];
myContent = myContent.replace(RegExp('\r\n' + myEntry + '\r\n', ''), '\r\n');
content = content.replace(/\r\n@@@LINK=.+\r\n/, myContent);
}
# -*- coding: utf-8 -*-
# 开发团队:
# 开发人员:Lenovo
# 文件名称:modifier2.0.py
# 开发工具:PyCharm
code = input("请输入编码方式:")
source = open('input.txt', 'r', encoding=code)
source_text = source.read()
source.close()
source_list = source_text.split('</>')
dic_list = []
text_list = []
for item in source_list:
if '@@@' in item:
text_list.append(item)
else:
dic_list.append(item)
text_content = '</>'.join(text_list)
dic = open('dic.txt','w+',encoding=code)
dic.write('</>'.join(dic_list))
dic.seek(0,0)
pydict={}
count = dic.read().count('</>')
dic.seek(0,0)
for i in range(count):
word = dic.readline().rstrip()
number = word
meaning = ''
while 1:
single_line = dic.readline()
if single_line.strip() != '</>':
meaning += single_line
else:
break
pydict[number]=meaning
for number,meaning in pydict.items():
if number in text_content:
text_content = text_content.replace('='+number,meaning)
text_content=text_content.replace('@@@LINK','')
dic.close()
output = open('output.txt','w+',encoding=code)
text_content = text_content.replace('\n\n','\n')
output.write(text_content)
output.close()
写了一个Python程序,但是如果txt太大运行起来贼慢。请教大佬如何重构代码。
我的脚本这么简单,你就不能看看批评一下?
这步很耗资源吧
或许for item in source_list:
这里就制作好pydict比较好,可以用split('\n')
代替后面的readline(),因为读写也很花时间。同时对于text_list也制作一个pydict2。然后两层循环,用pydict里的东西替换pydict2的@@@link=xxx
内容。最后把pydict,pydict2一起写到输出文件就行了。
python的词典不知道能不能排序,如果能那查找能再快一点。
纯意淫,我python也忘光了
你确定这个正则表达式没问题?为什么我一个都匹配不到
这是我的古董文本编辑器支持的js脚本,跑过没问题。你确定 python 里 RegExp() 这个函数吗?
RegExp对应的是Python里的re.compile函数?那里我不编译成正则表达式模式行不行?还有你这个代码是在什么操作系统下跑通的?我在Windows里面是不是应该把\r\n换成\n?另:在你的设定中,.能不能匹配到换行符?
import re
code = input("请输入编码方式:")
source = open('input.txt', 'r', encoding=code)
content = source.read()
source.close()
content = "\n" + content + "\n" # 当前文本文件的完整内容
myEntry = "" # 一个词头
myContent = "" # 一条释义
while re.findall(r'\n@@@LINK=.+\n', content, re.S):
myEntry = re.findall(r'\n@@@LINK=.+\n', content,re.S)[0]
myEntry = re.sub(r'@@@LINK=', '', myEntry)
myEntry = re.sub(r'\n', '', myEntry)
myContent = re.findall('\n' + myEntry + '\n.+\n', content, re.S)[0] # 这行的正则表达式有误
myContent = re.sub('\n' + myEntry + '\n', '\n', myContent)
content = re.sub('\n@@@LINK=.+\n', myContent, content)
output_file = open('output.txt', 'w+', encoding=code)
output_file.write(content)
output_file.close()
这我不知道,我想那点代码虽然是js的,但是意思应该一看就懂吧
看来你没找到python里面生成包含字符串变量的正则表达式的函数
在 Windows 下的一个小众古董编辑器中的 js 脚本
我碰到的大多数文件都是用 \r\n 就能匹配换行符,有些可能只要 \r 或 \n,这里面有个说法的现在忘了
测试