Skocz do zawartości
Opublikowano

Cześć

 

Dziś chciałem dodać sobie skrypt Pythona który generuje komentarze z nazwami pobieranymi z item_names.txt do mob_drop_item.txt ale coś mi nie idzie..

 

Moja wersja Pythona:

Python 3.9.18

 

Na początku skrypt krzyczał o "import chardet"

 

Zainstalowałem go poleceniem:

pkg install py39-chardet

 

Lecz teraz mam taki błąd przy generowaniu nowego mob_drop_item.txt

Traceback (most recent call last):
  File "/usr/home/mt2/share/converter/drop.py", line 22, in <module>
    vnum, name = line.strip().split('\t')
ValueError: not enough values to unpack (expected 2, got 1)

 

A oto sam skrypt:

 

import chardet
import codecs

def detect_encoding(filename):
    with open(filename, 'rb') as f:
        result = chardet.detect(f.read())
    return result['encoding']

with codecs.open('item_names.txt', 'r', encoding='cp1250') as source_file:
    contents = source_file.read()

with codecs.open('item_names_utf8.txt', 'w', encoding='utf-8') as target_file:
    target_file.write(contents)

with open('item_names_utf8.txt', 'r', encoding='utf-8') as f:
    item_names = {}
    for line in f:
        if 'VNUM' in line or 'LOCALE_NAME' in line:
            continue
        vnum, name = line.strip().split('\t')
        item_names[vnum] = name

drop_cpp_encoding = detect_encoding('mob_drop_item.txt')
with open('mob_drop_item.txt', 'r', encoding=drop_cpp_encoding) as f:
    lines = f.readlines()

new_lines = []
for line in lines:
    if line.startswith('Group') or 'exp' in line:
        new_lines.append(line)
    else:
        parts = line.split('\t')
        if len(parts) > 2 and parts[2] in item_names:
            line = line.rstrip() + ' // ' + item_names[parts[2]] + '\n'
        new_lines.append(line)

with open('mob_drop_item2.txt', 'w', encoding='utf-8') as f:
    f.writelines(new_lines)

 

Rozwiązane przez Sevence

Przejdź do rozwiązania

Featured Replies

Opublikowano
  • Rozwiązanie

Z błędu wynika, że w pliku item_names_utf8 napotyka złe formatowanie albo puste linie. Spróbuj zmienić tak: 

with open('item_names_utf8.txt', 'r', encoding='utf-8') as f:
	item_names = {}
	for line in f:
		if 'VNUM' in line or 'LOCALE_NAME' in line:
			continue
		parts = line.strip().split('\t')
		if len(parts) == 2:
			vnum, name = parts
			item_names[vnum] = name

 

Nie wiem, co tam używasz tabów czy spacje, ale to sobie dostosuj tu masz taby bo wyrzuci błędy z syntaxem.

Opublikowano
  • Autor

Używam tabulatorów ale mam też dodane komentarze rozdzielajace na metiny/moby/bossy

Opublikowano
  • Autor

Dziękuje @Sevence ❤️ 

 

Nie ukrywam, że można to rozbudować o tłumaczenie moba nawet 😄 no ale można go też wpisać w Group

image.png.7dd088035eae8e4c641836e300710f1e.png

Edytowane przez Marchewa

  • Sevence zablokował(a) ten temat
Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.