用空值计算元组的字符串表示

2024-04-25 09:51:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个文本文件,其中包含元组的字符串表示形式,我想将其转换为实际元组,然后将它们作为行添加到csv文件中。但是,有些值为NULL,这会导致在使用eval()时出现名称错误

文本文件中的一行示例如下:

(2,'Spawn Point (Only GM can see it)',NULL,1,1,262,0,0,0,35,35,0,0,1,3,3,0,0,32768,0,0,0,0,1.14286,20,0,0,0,0,1,0,1,1,1,1,1,1,42,42,0,0,11,11,387.6,532.95,15,5,100,1800,1900,0,222,1110,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'','')

可以看出,第三个值为空

这是我的密码:

import csv
filename = "D:\\Downloads\\Quest addon\\creature_template.txt"
file = open(filename, "r")
with open("D:\\Downloads\\Quest addon\\creature_template.csv", "w") as test_file:
    file_writer = csv.writer(test_file, lineterminator = '\n')
    file_writer.writerow(['Entry', 'Name', 'SubName', 'MinLevel', 'MaxLevel', 'ModelId1', 'ModelId2', 'ModelId3', 'ModelId4', 'FactionAlliance', 'FactionHorde', 'Scale', 'Family', 'CreatureType', 'InhabitType', 'RegenerateStats', 'RacialLeader', 'NpcFlags', 'UnitFlags', 'DynamicFlags', 'ExtraFlags', 'CreatureTypeFlags', 'SpeedWalk', 'SpeedRun', 'Detection', 'CallForHelp', 'Pursuit', 'Leash', 'Timeout', 'UnitClass', 'Rank', 'HealthMultiplier', 'PowerMultiplier', 'DamageMultiplier', 'DamageVariance', 'ArmorMultiplier', 'ExperienceMultiplier', 'MinLevelHealth', 'MaxLevelHealth', 'MinLevelMana', 'MaxLevelMana', 'MinMeleeDmg', 'MaxMeleeDmg', 'MinRangedDmg', 'MaxRangedDmg', 'Armor', 'MeleeAttackPower', 'RangedAttackPower', 'MeleeBaseAttackTime', 'RangedBaseAttackTime', 'DamageSchool', 'MinLootGold', 'MaxLootGold', 'LootId', 'PickpocketLootId', 'SkinningLootId', 'KillCredit1', 'KillCredit2', 'MechanicImmuneMask', 'SchoolImmuneMask', 'ResistanceHoly', 'ResistanceFire', 'ResistanceNature', 'ResistanceFrost', 'ResistanceShadow', 'ResistanceArcane', 'PetSpellDataId', 'MovementType', 'TrainerType', 'TrainerSpell', 'TrainerClass', 'TrainerRace', 'TrainerTemplateId', 'VendorTemplateId', 'GossipMenuId', 'EquipmentTemplateId', 'Civilian', 'AIName', 'ScriptName'])
    for line in file:
        line = eval(line)
        file_writer.writerow(line)

运行时出现以下错误:

Traceback (most recent call last):
  File "D:\Downloads\Quest addon\data to csv.py", line 10, in <module>
    line = eval(line)
  File "<string>", line 1, in <module>
NameError: name 'NULL' is not defined

Tags: csvinaddondownloads错误evallinefilename
1条回答
网友
1楼 · 发布于 2024-04-25 09:51:40

问题是“NULL”在Python中不是有效的关键字。您可以用Python关键字“None”替换“NULL”的所有实例。也就是说,在eval行之前,可以写line.replace("NULL", "None")。你知道吗

相关问题 更多 >