是否有更简洁的方法来执行以下操作,例如:在一行而没有临时变量f
?
with open('foo.txt', 'w') as f:
f.write('foobar')
我经常用脚本编写一堆文件,这看起来很难看,例如:在我的一个测试脚本中,我有以下丑陋:
sorted_alembic_schema = sort_lines_without_commas(alembic_schema)
sorted_sqlalchemy_schema = sort_lines_without_commas(sqlalchemy_schema)
if sorted_alembic_schema != sorted_sqlalchemy_schema:
for file_name, file_contents in [('alembic.schema', alembic_schema),
('sqlalchemy.schema', sqlalchemy_schema),
('alembic.schema.sorted', sorted_alembic_schema),
('sqlalchemy.schema.sorted', sorted_sqlalchemy_schema)]:
with open(file_name, 'w') as f:
f.write(file_contents)
print("""
ERROR: alembic upgrade schema doesn't match sqlalchemy schema; see local files for more info, e.g.
meld sqlalchemy.schema alembic.schema
meld sqlalchemy.schema.sorted alembic.schema.sorted
FAIL"""
)
答案 0 :(得分:1)
with
关键字已经是压缩,可以打开,刷新和关闭某些内容。这句话没有任何一个词压缩。
答案 1 :(得分:1)
丑陋的代码无法一直避免,丑陋的代码不一定是坏代码。但是,肯定有改进的余地。
关于文件编写:为其提取方法
def StringToFile(file_path, content):
with open(file_path, 'w') as fp:
fp.write(content)
或使用像numpy.savetext这样的外部库函数:
np.savetxt('test.out', x, delimiter=',') # X is an array
答案 2 :(得分:0)
临时变量f表示打开的文件对象。 with块负责打开文件并锁定它以进行写入(os-level)。当with块关闭时,释放写锁定。我认为你拥有它的方式是完美的。
答案 3 :(得分:0)
您可以定义一个处理单行写入的函数,但它只是对您已编写的内容的封装。
def quick_write(file_path, content):
with open(file_path, 'w') as fp:
fp.write(content)
在你的代码中,它将用-statement代替2行:
if sorted_alembic_schema != sorted_sqlalchemy_schema:
for file_name, file_contents in [...]:
quick_write(file_name, file_contents)