我有一个简单的txt文件,它由许多行组成。像下面的东西
Name1
0
0
0
0
Name2
0
0
0
0
Name3
...
...
...
(通过......我的意思是文件以相同的方式继续,直到无限假设)
现在我的问题是,如何创建某种"文件控件"?我想只在文件大纲是上面提到的形式时才使用该文件。
我目前的一段代码包含一个Try-Except部分,如下所示:
def foo
try:
content = open("filename.txt")
except:
file1 = [name1,0,0,0,0,name2,0,0,0,0....]
save(file1)
content = open("filename.txt")
lscontent = content.read().splitlines()
file.close()
save()的功能非常明显。它只会以我希望的形式创建列表并将其保存到文件中。像初始值的东西。我的麻烦是,如果用户更改文件格式或文件损坏,那么程序很可能会崩溃。
在启动程序本身之前,是否有任何简单的想法可以控制它?如果文件损坏,我想用初始值替换文件,这意味着我希望文件控件位于函数foo的try部分。当然,我希望正确的文件具有上述结构。
答案 0 :(得分:0)
from shutil import copyfile
import re
is_number_or_varname = re.compile("(\d+|[a-z]\w*)$", re.I).match
def get_good_file(fname, line_rule, default_fname):
with open(fname) as inf:
if all(line_rule(line) for line in inf):
inf.seek(0)
return inf.readlines()
# else
copyfile(default_fname, fname)
with open(default_fname) as inf:
return inf.readlines()
data = get_good_file("filename.txt", is_number_or_varname, "defaults.txt")