如何避免在';中关闭python文件时创建零字节文件;w';错误导致的模式?

如何避免在';中关闭python文件时创建零字节文件;w';错误导致的模式?,python,file-io,python-3.4,Python,File Io,Python 3.4,我在Windows7上使用的是Python3.4.1 64位。AFAICS,这对手边的问题不重要,但我已经包含了这些信息,以防万一。以下是我代码的相关部分: def download_and_save(URL_list, filenames, download_dir): # Process lists for URL, filename in zip(URL_list, filenames): # Generate full path name file_path = down

我在Windows7上使用的是Python3.4.1 64位。AFAICS,这对手边的问题不重要,但我已经包含了这些信息,以防万一。以下是我代码的相关部分:

def download_and_save(URL_list, filenames, download_dir):
# Process lists
for URL, filename in zip(URL_list, filenames):
    # Generate full path name
    file_path = download_dir + filename
    # Open a local file.
    with open(file_path, 'w') as local_file:
        # Write whatever is at the URL
        try:
            local_file.write(urllib.request.urlopen(URL).read())
        except urllib.request.URLError as e:
            if hasattr(e, 'reason'):
                print ("We failed to reach the server...")
                print(e.reason)
            elif hasattr(e, 'code'):
                print("The server couldn\'t fullfill the request...")
                print("Error code: ", e.code)
当我运行这段代码时,我遇到了一系列错误(getaddrinfo失败-因为输入错误)。当我检查之后保存该文件的目录时,我发现一堆文件具有预期的文件名,但长度为零字节。这是有道理的,因为没有写作发生


我试图弄明白为什么在这种情况下的假设是进行触摸并创建文件,而不是不这样做。更重要的是,我是否可以关闭此触摸行为,以便在关闭时不会创建任何文件?我是否缺少一种更好的方法来完成此操作,从而完全绕过问题?

使用
open
函数创建文件。如果不希望在出现错误时创建空文件,请在从服务器获得响应后创建文件:

try:
    data = urllib.request.urlopen(URL).read()
    with open(file_path, 'w') as local_file:
        local_file.write(data)
except urllib.request.URLError as e:
    # ... exception handling

open
函数创建文件。如果不希望在出现错误时创建空文件,请在从服务器获得响应后创建文件:

try:
    data = urllib.request.urlopen(URL).read()
    with open(file_path, 'w') as local_file:
        local_file.write(data)
except urllib.request.URLError as e:
    # ... exception handling

你可以采取两种方法

  • 当代码进入except块时,删除该文件,这意味着存在错误,并且您不想要大小为零的文件

  • 使用字符串存储url读取的值。仅当url读取成功时才将字符串写入文件。这是更好的方法


  • 你可以采取两种方法

  • 当代码进入except块时,删除该文件,这意味着存在错误,并且您不想要大小为零的文件

  • 使用字符串存储url读取的值。仅当url读取成功时才将字符串写入文件。这是更好的方法


  • 使用open(file_path,'w')作为本地_文件
    创建文件时,无论是否写入文件
    w
    如果文件不存在,则创建该文件。
    使用open(file_path,'w')作为local_file
    创建文件时,无论是否写入文件
    w
    如果文件不存在,则创建该文件。谢谢!读完这篇文章后,我很想把我的手掌放在脸上。应该很明显,但我因为某种原因错过了。你认为我应该删除这个问题以保持现场良好的信噪比吗?这是一个相当愚蠢的问题。这个问题很好,你至少已经投了一张赞成票。:)十分钟一过,我就接受你的答复。再次感谢!非常感谢。读完这篇文章后,我很想把我的手掌放在脸上。应该很明显,但我因为某种原因错过了。你认为我应该删除这个问题以保持现场良好的信噪比吗?这是一个相当愚蠢的问题。这个问题很好,你至少已经投了一张赞成票。:)十分钟一过,我就接受你的答复。再次感谢!正当我应该自己想出方法二,哈哈。我不想删除这个文件(有点奇怪),但这是一个非常有效的解决方案。是的,方法二是正确的。我应该自己想出方法二,哈哈。我不想删除这个文件(有点奇怪),但这是一个非常有效的解决方案。是的,方法二是正确的。