简洁地将整个字符串写入文件python

时间:2017-11-12 02:49:57

标签: python python-3.x

是否有更简洁的方法来执行以下操作,例如:在一行而没有临时变量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"""
          )

4 个答案:

答案 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)