这个问题主要涉及像我这样的人,他们对整体编码还是陌生的。我最近开始从一本教科书和各种在线资源中学习python,因为这本质上是我的第一门编程语言,并且是第一次接触编码,所以我很难理解如何将通用结构结合到脚本中。
目前,我正在编写代码,将数据文件的各个部分解析为单独的列表(以我的理解为读者),然后使我可以对这些列表进行用户确定的更改的代码,最后是用于将新列表写入文件的代码。最终目标是拥有使我能够添加/删除特定数据值并生成具有确定更改的新数据文件的代码。
到目前为止,编写代码本身并不是很难读取和编辑文件,但是我不知道应该如何编写各种功能以便“整齐有序”。因为我实际上是在做这个小项目的同时学习语言,所以我不熟悉标准语言代码结构。
通常来说,对于这样的项目,我应该全部用一个由单独的类/函数组成的脚本来编写全部内容吗?编写单独的模块将返回值从一个导入到另一个中更好吗?一个模块具有多个类是典型的做法吗?从一种鸟瞰方法到结构化代码,什么是最好的方法?目前,我的代码没有实际的结构,所有内容实际上都在任何main()类和函数之外编写,并且仅在给定特定输入文件的情况下运行,但我很确定这可能不是编写代码的正确方法。对初学者的问题表示歉意,但是我在编写此代码时一直在学习,并且尚未涉及构建脚本本身的文字的任何部分。
答案 0 :(得分:0)
我不确定SO是否是最好的询问场所。但是,帮助我的一件事是为可管理的逻辑块创建不同的功能。您提到所有代码都是没有任何结构的。
很棒的是,您已经提到了逻辑上的分离。尝试使具有基于该逻辑的一项工作的功能。例如:
-“将数据文件的各个部分解析为单独的列表”
def parse_data_file(full_file_path):
raw_data = read_file(full_file_path) # delegate this out to another function if you're feeling like you need more separation
data_lists = generate_sub_lists(raw_data) # delegate
return data_lists
-“将允许我对用户定义的列表进行更改”
def edit_lists(user_commands_kv_args, data_lists):
for type_of_command, command in user_commands_kv_args:
if type_of_command == 'Delete':
run_command_on_lists(command='Delete', data_lists)
-“用于将新列表写入文件的代码”
def write_lists_to_file(data_lists, output_file_full_path):
with open(output_file_full_path, 'w+') as f:
for ls in data_lists:
f.writelines(ls)
至少现在您可以根据功能进行一些区分。稍后,您甚至可以根据操作类型创建单独的类。例如:
class DataParser():
def __init__(full_file_path):
self.file_path = full_file_path
def read_from_sql():
pass
def read_from_mongo():
pass
def read_from_txt():
pass
这样做的好处是,如果文件格式或源发生更改,则只需要调整类接口以解析该数据即可,而无需调整整个主要入口点代码。希望有帮助。