找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26155|回复: 12

[文件操作] [已解决]提取两个文本等号左面不同的内容

[复制链接]
发表于 2015-11-9 12:19:13 | 显示全部楼层 |阅读模式
本帖最后由 yuningning520 于 2015-11-9 15:40 编辑

干脆用正则删了右边内容然后对比了【真是残念


换一个思路好了,范例里gui.back=Back是多出来的,单独提取到新文本就好了。

比如两个文本,但是前者因为更新有了更多的内容,后者不能直接全部覆盖
  • en_US.lang
  • gui.done=Done
  • gui.cancel=Cancel
  • gui.back=Back

  • zh_CN.lang
  • gui.done=完成
  • gui.cancel=取消

把zh_CN.lang目前的内容替换到en_US.lang里而不影响新加入的gui.back=Back
另外大神们可以将未替换内容放在最后么。
发表于 2015-11-9 12:28:43 | 显示全部楼层
文件传网盘放链接。
 楼主| 发表于 2015-11-9 13:10:56 | 显示全部楼层
回复 2# 依山居

    可以写个bat么。。。因为有很多要改的、
发表于 2015-11-9 13:20:47 | 显示全部楼层
回复 3# yuningning520


    你装个Beyond Compare 4,是文件对比工具。点点几下也能替换完了。
发表于 2015-11-9 13:23:20 | 显示全部楼层
回复 3# yuningning520


  替代规则是什么?有的就都替换?
 楼主| 发表于 2015-11-9 13:33:22 | 显示全部楼层
回复 4# 依山居


    文本不对齐的。
 楼主| 发表于 2015-11-9 13:33:59 | 显示全部楼层
回复 5# 依山居


    等号左边相同替换右边。全部的。
发表于 2015-11-9 14:12:19 | 显示全部楼层
第一想法就是sed命令
 楼主| 发表于 2015-11-9 14:17:31 | 显示全部楼层
回复 8# B魔方大人


    换一个思路好了,范例里gui.back=Back是多出来的,单独提取的新文本就好了。不过因为更新,中文的翻译里等号左边也会有不同的,也提取出来就可以了。
求写个bat。。。我看代码比较晕。。。
发表于 2015-11-14 17:22:59 | 显示全部楼层
再提供解决这类问题的思路,楼主可以试试,把文件放到github这样带版本管理的代码托管网站上。
每次版本有更新的话,把内容贴到旧文件里能看到有修改的地方。
发表于 2015-11-24 12:19:03 | 显示全部楼层
  1. """
  2. python字典读取语言文件=号后的内容合并.py
  3. 题目来源 http://www.bathome.net/thread-38064-1-2.html
  4. 依山居 10:54 2015/11/24
  5. 使用python字典合并内容,不能保持原文件的顺序~
  6. """
  7. with open("zh_CN.lang",encoding="utf-8") as f:
  8.     zh=[r.rstrip().split("=") for r in f.readlines() if "=" in r ]
  9. zh={r[0]:r[1] for r in zh}

  10. with open("en_US.lang",encoding="utf-8") as f:
  11.     en=[r.split("=") for r in f.readlines() if "=" in r ]
  12. en={r[0]:r[1] for r in en}

  13. for r in zh:
  14.     if (zh[r]!=''):
  15.         en[r]=zh[r]

  16. result=sorted([r+"="+en[r]+'\n' for r in en])
  17. with open("out.txt","w+",encoding="utf-8") as f:
  18.     f.writelines(result)
  19.     f.close()

复制代码
发表于 2015-11-24 12:56:46 | 显示全部楼层
  1. """
  2. python正则替换语言文件=号后的内容合并.py
  3. http://www.bathome.net/thread-38064-1-2.html
  4. 依山居 12:29 2015/11/24
  5. 这个版本使用正则匹配替换
  6. 使用cn文件中已有的内容,正则替换en文件内容输出到out.txt
  7. out.txt保持了en文件的顺序
  8. """
  9. import re
  10. with open("zh_CN.lang",encoding="utf-8") as f:
  11.     zh=f.read()
  12. rec=re.compile("(.+)=(.*)\n")
  13. zht=re.findall(rec,zh)

  14. with open("en_US.lang",encoding="utf-8") as f:
  15.     en=f.read()

  16. for e,c in zht:
  17.     rec=re.compile("(%s)=(.*)\n" %e)
  18.     en=re.sub(rec,r"\1=%s\n" %c,en)

  19. with open("out.txt","w+",encoding="utf-8") as f:
  20.     f.write(en)
  21.     f.close()
复制代码
发表于 2015-11-24 13:42:15 | 显示全部楼层
  1. """
  2. python对比语言文件输出等号前面不同的行.py
  3. http://www.bathome.net/thread-38064-1-2.html
  4. 依山居 13:41 2015/11/24
  5. """
  6. import re
  7. with open("zh_CN.lang",encoding="utf-8") as f:
  8.     zh=f.read()
  9. rec=re.compile("(.+)=(.*)\n")
  10. zht=re.findall(rec,zh)

  11. with open("en_US.lang",encoding="utf-8") as f:
  12.     en=f.read()
  13.     ent=re.findall(rec,en)
  14.    
  15. notinen=[e+"="+c+"\n" for e,c in zht if (e not in en)]
  16. notinzh=[k+"="+v+"\n" for k,v in ent if (k not in zh)]

  17. with open("diff.txt","w+",encoding="utf-8") as f:
  18.     if len(notinen)>=1:
  19.         f.writelines(['zh文件比en文件多出的行:\n']+notinen)
  20.     if len(notinzh)>=1:
  21.         f.writelines(['en文件比zh文件多出的行:\n']+notinzh)
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 07:42 , Processed in 0.021209 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表