我刚接触python一周,所以请不要介意我的无知,我正在阅读一个csv文件并从中创建一个json文件,同时我正在添加一个新字段 JerseyNumber到我的字段\u names,由于这个值在csv中不存在,它被存储为null,有没有什么方法可以填充这个字段,所以我的做法是有一个数字列表,例如-
JERSEYNUMBERS = ["1","2","3","4","5","6","7"]
以及 使用-
"".join(random.sample(JERSEYNUMBERS,2))
但是我找不到方法用json把它放进去,因为使用restval="".join(random.sample(JERSEYNUMBERS,2)
不会给出随机值,也不会将相同的值更新到所有的Jersey数字
我的csv到json函数-
def csv_to_json (csv_file_name_str, json_file_name_str):
try:
logging.info("converting {} to {}".format(csv_file_name_str, json_file_name_str))
csv_file = open(csv_file_name_str, "r")
json_file = open(json_file_name_str, "w")
field_names = ["Name", "Height", "SoccerExperience", "GuardianName", "JerseyNumber"]
reader = csv.DictReader(csv_file, field_names, restval="".join(random.sample(JERSEYNUMBERS,2)))
logging.info("Conversion finish.")
out = '{\n "Players": [\n\t'+ ',\n\t'.join([json.dumps(row) for row in reader]) + '\n]\n}'
json_file.write(out)
return json_file_name_str
except (OSError, IOError, TypeError) as e:
logging.error("csv to json conversion failed: Caused by -> {}".format(e))
我的json文件在JerseyNumbers中有空值(这是我的测试数据不是真实的人)-
{
"Players": [
{"Name": "Name", "Height": "Height (inches)", "SoccerExperience": "Soccer Experience", "GuardianName": "Guardian Name(s)", "JerseyNumber": null},
{"Name": "Joe Smith", "Height": "42", "SoccerExperience": "YES", "GuardianName": "Jim and Jan Smith", "JerseyNumber": null},
{"Name": "Jill Tanner", "Height": "36", "SoccerExperience": "YES", "GuardianName": "Clara Tanner", "JerseyNumber": null},
{"Name": "Bill Bon", "Height": "43", "SoccerExperience": "YES", "GuardianName": "Sara and Jenny Bon", "JerseyNumber": null},
{"Name": "Eva Gordon", "Height": "45", "SoccerExperience": "NO", "GuardianName": "Wendy and Mike Gordon", "JerseyNumber": null},
{"Name": "Matt Gill", "Height": "40", "SoccerExperience": "NO", "GuardianName": "Charles and Sylvia Gill", "JerseyNumber": null},
{"Name": "Kimmy Stein", "Height": "41", "SoccerExperience": "NO", "GuardianName": "Bill and Hillary Stein", "JerseyNumber": null},
{"Name": "Sammy Adams", "Height": "45", "SoccerExperience": "NO", "GuardianName": "Jeff Adams", "JerseyNumber": null},
{"Name": "Karl Saygan", "Height": "42", "SoccerExperience": "YES", "GuardianName": "Heather Bledsoe", "JerseyNumber": null},
{"Name": "Suzane Greenberg", "Height": "44", "SoccerExperience": "YES", "GuardianName": "Henrietta Dumas", "JerseyNumber": null},
{"Name": "Sal Dali", "Height": "41", "SoccerExperience": "NO", "GuardianName": "Gala Dali", "JerseyNumber": null},
{"Name": "Joe Kavalier", "Height": "39", "SoccerExperience": "NO", "GuardianName": "Sam and Elaine Kavalier", "JerseyNumber": null},
{"Name": "Ben Finkelstein", "Height": "44", "SoccerExperience": "NO", "GuardianName": "Aaron and Jill Finkelstein", "JerseyNumber": null},
{"Name": "Diego Soto", "Height": "41", "SoccerExperience": "YES", "GuardianName": "Robin and Sarika Soto", "JerseyNumber": null},
{"Name": "Chloe Alaska", "Height": "47", "SoccerExperience": "NO", "GuardianName": "David and Jamie Alaska", "JerseyNumber": null},
{"Name": "Arnold Willis", "Height": "43", "SoccerExperience": "NO", "GuardianName": "Claire Willis", "JerseyNumber": null},
{"Name": "Phillip Helm", "Height": "44", "SoccerExperience": "YES", "GuardianName": "Thomas Helm and Eva Jones", "JerseyNumber": null},
{"Name": "Les Clay", "Height": "42", "SoccerExperience": "YES", "GuardianName": "Wynonna Brown", "JerseyNumber": null},
{"Name": "Herschel Krustofski", "Height": "45", "SoccerExperience": "YES", "GuardianName": "Hyman and Rachel Krustofski", "JerseyNumber": null}
]
}
与restval
-
{
"Players": [
{"Name": "Name", "Height": "Height (inches)", "SoccerExperience": "Soccer Experience", "GuardianName": "Guardian Name(s)", "JerseyNumber": "13"},
{"Name": "Joe Smith", "Height": "42", "SoccerExperience": "YES", "GuardianName": "Jim and Jan Smith", "JerseyNumber": "13"},
{"Name": "Jill Tanner", "Height": "36", "SoccerExperience": "YES", "GuardianName": "Clara Tanner", "JerseyNumber": "13"},
{"Name": "Bill Bon", "Height": "43", "SoccerExperience": "YES", "GuardianName": "Sara and Jenny Bon", "JerseyNumber": "13"},
{"Name": "Eva Gordon", "Height": "45", "SoccerExperience": "NO", "GuardianName": "Wendy and Mike Gordon", "JerseyNumber": "13"},
{"Name": "Matt Gill", "Height": "40", "SoccerExperience": "NO", "GuardianName": "Charles and Sylvia Gill", "JerseyNumber": "13"},
{"Name": "Kimmy Stein", "Height": "41", "SoccerExperience": "NO", "GuardianName": "Bill and Hillary Stein", "JerseyNumber": "13"},
{"Name": "Sammy Adams", "Height": "45", "SoccerExperience": "NO", "GuardianName": "Jeff Adams", "JerseyNumber": "13"},
{"Name": "Karl Saygan", "Height": "42", "SoccerExperience": "YES", "GuardianName": "Heather Bledsoe", "JerseyNumber": "13"},
{"Name": "Suzane Greenberg", "Height": "44", "SoccerExperience": "YES", "GuardianName": "Henrietta Dumas", "JerseyNumber": "13"},
{"Name": "Sal Dali", "Height": "41", "SoccerExperience": "NO", "GuardianName": "Gala Dali", "JerseyNumber": "13"},
{"Name": "Joe Kavalier", "Height": "39", "SoccerExperience": "NO", "GuardianName": "Sam and Elaine Kavalier", "JerseyNumber": "13"},
{"Name": "Ben Finkelstein", "Height": "44", "SoccerExperience": "NO", "GuardianName": "Aaron and Jill Finkelstein", "JerseyNumber": "13"},
{"Name": "Diego Soto", "Height": "41", "SoccerExperience": "YES", "GuardianName": "Robin and Sarika Soto", "JerseyNumber": "13"},
{"Name": "Chloe Alaska", "Height": "47", "SoccerExperience": "NO", "GuardianName": "David and Jamie Alaska", "JerseyNumber": "13"},
{"Name": "Arnold Willis", "Height": "43", "SoccerExperience": "NO", "GuardianName": "Claire Willis", "JerseyNumber": "13"},
{"Name": "Phillip Helm", "Height": "44", "SoccerExperience": "YES", "GuardianName": "Thomas Helm and Eva Jones", "JerseyNumber": "13"},
{"Name": "Les Clay", "Height": "42", "SoccerExperience": "YES", "GuardianName": "Wynonna Brown", "JerseyNumber": "13"},
{"Name": "Herschel Krustofski", "Height": "45", "SoccerExperience": "YES", "GuardianName": "Hyman and Rachel Krustofski", "JerseyNumber": "13"}
]
}
为了直接回答你的问题,我认为你应该避免使用restval。Restval似乎填充了所有的空值。如果一个玩家的名字是空的,而您使用的是restval,那么这个玩家的名字最终将是一个两位数的数字。这在我们生活的时代可能并不奇怪
我认为你应该在球员身上循环,给他们每个人分配一个值作为他们的球衣号码属性:
可以在代码中包含的简单改进:
with
将在退出with
块时关闭文件,释放文件句柄李>因此我有了一个突破:),我创建了一个新函数,在将文件发送到应用程序之前加载文件,并添加泽西岛号码
基本上,我是从Players键中获取值(这是一个列表),并在其上循环,将值添加到给定的键中,然后返回一个新的json加载对象
有更有效的方法可以做到这一点,但目前我对python的有限知识只能给我一个出路
相关问题 更多 >
编程相关推荐