ฉันมีไฟล์ INIสองไฟล์และฉันต้องการเห็นความแตกต่างระหว่างนั้น (ซึ่งคีย์ใดมีค่าแตกต่างกันและที่หนึ่งมีคีย์ที่อื่น ๆ ไม่ได้) ดังนั้น ...
วิธีเปรียบเทียบไฟล์ INI สองไฟล์(หรือมากกว่า) ?
ฉันมีไฟล์ INIสองไฟล์และฉันต้องการเห็นความแตกต่างระหว่างนั้น (ซึ่งคีย์ใดมีค่าแตกต่างกันและที่หนึ่งมีคีย์ที่อื่น ๆ ไม่ได้) ดังนั้น ...
วิธีเปรียบเทียบไฟล์ INI สองไฟล์(หรือมากกว่า) ?
คำตอบ:
นี่คือคำตอบจาก serverfault
https://serverfault.com/questions/28194/is-there-a-tool-to-compare-values-in-ini-files
หรือดูรายการเครื่องมือแก้ไข / เปรียบเทียบ Iniนี้แม้ว่าเครื่องมือที่ต่างกันอาจเป็นวิธีที่ง่ายที่สุด
คุณอาจใช้เครื่องมือเปรียบเทียบสำหรับสิ่งนั้นเช่นWinmergeเครื่องมือโอเพ่นซอร์สและเครื่องมือส่วนต่างฟรีสำหรับ Windows มันแสดงให้เห็นถึงสองไฟล์เคียงข้างกันการกำหนดความแตกต่าง
รองรับ Microsoft Windows 98/2000 / XP / 2003 / Vista / 7
ใช้ไฟล์เปรียบเทียบบรรทัดคำสั่งยูทิลิตี้ (ในหน้าต่างใด ๆ ) จากพรอมต์คำสั่ง (ป้อน cmd intor โต้ตอบเริ่มต้น / เรียกใช้)
fc inifile1.ini inifile2.ini
ผลลัพธ์จะถูกพิมพ์ออกมาโดยอัตโนมัติ หากคุณต้องการตรวจสอบผลลัพธ์
fc inifile1.ini inifile2.ini > results.txt
หลังจากนั้นคุณจะเห็นรายงานในไฟล์ results.txt
ฉันใช้ Beyond Compare โดย Scootersoftware มานานกว่า 10 ปีแล้ว http://www.scootersoftware.com/
ฉันใช้บริการนี้http://inicompare.io/
เปรียบเทียบมากกว่าสอง
จริง ๆ แล้วฉันได้เขียนแอป CLI เพื่อจัดการกับปัญหานี้เมื่อฉันจัดการกับมันในที่ทำงานและนายจ้างของฉันก็ใจดีพอที่จะให้ฉันเปิดแหล่งที่มา:
https://github.com/Comcast/compare-ini-files
สิ่งนี้จะเปรียบเทียบไฟล์ ini ตั้งแต่ 2 ไฟล์ขึ้นไปและรายงานค่าที่แตกต่างกันและ stanzas ที่หายไป
สำหรับเหตุผลที่ฉันไม่พบสิ่งที่ฉันกำลังมองหาที่นี่วิธีการแก้งูหลามที่รวดเร็วและสกปรกของฉันบางทีมันอาจช่วยใครบางคน:
import configparser as cp
f1 = "org.ini"
f2 = "new.ini"
config1 = cp.ConfigParser()
config2 = cp.ConfigParser()
config1.read(f1)
config2.read(f2)
for section in config1.sections():
if section not in config2.sections():
print(section, "NOT in 2")
else:
for key in config1[section]:
if key not in config2[section]:
print("[miss] section", section, "key", key, "not in new")
else:
if config1[section].get(key).split(";")[0].strip() != config2[section].get(key).split(";")[0].strip():
print("[chang] section", section, "key", key, config1[section].get(key).split(";")[0].strip(),
"org != new", config2[section].get(key).split(";")[0].strip())
for section in config2.sections():
if section not in config1.sections():
print(section, "NOT in 1")
else:
for key in config2[section]:
if key not in config1[section]:
print("[miss] section", section, "key", key, "not in org")
นี่เป็นรุ่นที่ใหม่กว่าของhttp://winmerge.org/source-code/ซึ่งมีคนโพสต์ที่นี่ในหัวข้อนี้
ในการเปรียบเทียบ 3 ไฟล์คุณสามารถใช้VimDiffเช่น
vimdiff file1.ini file2.ini file3.ini
สำหรับเครื่องมือ GUI ตรวจสอบ: