一旦打开并且n次写入或n次打开,但每次打开一次写入?

时间:2014-04-15 15:44:44

标签: python file memory file-io time-complexity


所以问题是 - 使用哪种情况?我得到了网址列表,并获得了一些神奇的函数get_text_from_url - 我必须将其写入具有给定文件名的文件中 - 就像可以这样,但是这两种情况比另一种更好,为什么?
在这种情况下的优先级是时间和内存 - 不是可读性(对不起,Python)。
当然,欢迎任何其他版本。
第一:

def create_text(filename):        
    delete_current_text(filename)
    urllist = get_urls()
    for url in urllist:
        with open(filename, "a") as file:
             print >>file, get_text_from_url(url)


第二:

def create_text(filename):        
    urllist = get_urls()
    with open(filename, "w") as file:
         for url in urllist:
             print >>file, get_text_from_url(url)

2 个答案:

答案 0 :(得分:2)

你的第二个例子会更好,因为对文件的打开/关闭操作有很大的开销,而后者只做了一次。

但是,如果存储结果(如果get_text_from_url不会返回太大的内容)应该会更好,如下所示:

def create_text(filename):
    urllist = get_urls()
    result = map(get_text_from_url, urllist)
    with open(filename, "w") as file:
        file.write("\n".join(result))

因此只有一次写入,并且只在短时间内阻止文件(假设get_text_from_url将执行Web请求,这比本地文件写入花费更长的时间)。

答案 1 :(得分:1)

如果您打开文件,执行写操作,然后在完成后关闭它,I / O会更快。实际上,你在"打开一次,写n"和"打开n,写n"之间进行选择。 (不是"打开n,写一次"如你所说)。使用后一个选项,您每次打开只进行一次写入,但您仍然在进行n次写入。