为了账号安全,请及时绑定邮箱和手机立即绑定

写入文件的最后一个字符的“退格”

写入文件的最后一个字符的“退格”

九州编程 2021-03-16 13:14:15
我有一个输出SQL文件的Python应用程序:sql_string = "('" + name + "', " + age + "'),"output_files['sql'].write(os.linesep + sql_string)output_files['sql'].flush()这不是for循环完成的,而是在数据可用时写入的。当应用程序完成运行时,是否有任何方法可以在最后一个逗号字符上“退格”,并用分号替换它?我确信可以通过在换行符前输出逗号并使用全局Bool来确定是否有任何特定的“写”是第一个写操作,从而发明一些解决方法。但是,我认为,只要可以在其上“退格”,该应用程序就会更加干净。当然,成为Python也许有这么简单的方法!请注意,insert在此用例中,将每个值行放在一个列表中,然后将其内嵌到列表中并不是可行的解决方案。
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

使用生成器,例如:


def with_separator(data, sep):

    first = True:

    for datum in data:

        if first:

            first = False

        else:

            yield sep

        yield datum


with open("sdfasdfas", "w") as outf:

    for x in with_separator(sql_get_rows(), ",\n"):

        outf.write(x)

        # flush if needed

对于铁杆迭代器的使用,这应该可以帮助您入门:


In [11]: list( itertools.imap("".join, itertools.izip(itertools.chain([""], itertools.repeat(",\n")), "abc")) )

Out[11]: ['a', ',\nb', ',\nc']

如果您的数据使用命令式API(即不可迭代的),则将send()数据生成器:


def write_with_separator(filename, sep):

    with file(filename, "w"):

        first = True

        yield None

        while True:

            datum = yield None

            if first:

                first = False

            else:

                fout.write(sep)

            fout.write(datum)

            # flush if needed


writer = write_with_separator("somefilename", ",\n")

writer.next()  # can't send to just-started generator


# to be called when you get data

for row in sql_get_rows():

    writer.send(row)


查看完整回答
反对 回复 2021-03-31
  • 3 回答
  • 0 关注
  • 186 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信