我正试图将我肮脏的数据争用代码改进为一些好的、可读的和可靠的代码。
我相信我在这里做得相当好,虽然也许我应该有一些关于我的函数的文档字符串。尽管如此,我相信没有它们,它是相当可读的。
我很想得到一些关于改进方法的反馈!此脚本将来自格雷沃德神奇的公共领域同义词库的原始数据解析为一个更具可读性的JSON文件。
import sys
import os
import json
# Parses Grady Ward's public-domain thesaurus, available at
# ftp://svr-ftp.eng.cam.ac.uk/pub/comp.speech/dictionaries/moby/
def main():
database = {}
if len(sys.argv) < 3:
print("Usage: make_database <input filename> <ouput filename>")
sys.exit(1)
filename = sys.argv[1]
if not os.path.exists(filename):
print(f"File {filename} doesn't exist.")
sys.exit(1)
# Read file into database
with open(filename, "r") as file:
try:
parse_file(file, database)
print("Finished reading the file.")
except Exception as err:
print(f"Failed to read file {filename} with error {err}")
sys.exit(1)
# Write database to output file as JSON
output_filename = sys.argv[2]
with open(output_filename, "w+") as file:
try:
data = json.dumps(database)
file.write(data)
print(f"Finished writing to file {output_filename}")
except Exception as err:
print(f"Failed to read write to file {output_filename} with error {err}")
sys.exit(1)
def parse_file(file, database):
for line in file:
(word, thesaurus) = parse_line(line)
database[word] = thesaurus
def parse_line(line):
words = line.strip().split(",")
return (words[0], words[1:])
if __name__ == '__main__':
main()我还是个学生--我正在努力提高我的代码的可读性和可维护性。
它是一个命令行实用程序,可以称为:
make_database <input filename> <output filename>发布于 2018-09-08 11:57:11
发布于 2018-09-08 14:23:02
还有几点简短的评论:
parse_file和parse_line移动到main之上。parse_file函数可以使用map:def parse_file(文件、数据库)稍微缩短一些:对于word,地图中的同义词库(parse_line,file):数据库单词=同义词库parse_line中,您可以使用扩展元组解包给出更有意义的名称: def parse_line(行):word,*叙词库= line.strip().split(",")返回单词,同义词库database。我会把这条线移到第一需要的地方。或者,更好的是,让parse_file返回一个字典,因为您从未更新过现有的字典(即使更新了,也可以用返回的字典调用dict.update ):def ():.尝试:数据库=parse_file(文件名).def parse_file(文件):返回dict(map(parse_line,file))https://codereview.stackexchange.com/questions/203333
复制相似问题