【问题标题】:Does order matter when opening input and output files?打开输入和输出文件时顺序是否重要?
【发布时间】:2014-11-18 19:47:58
【问题描述】:

写入/读取文件的顺序是否正确?这是我通常做的:

  1. 打开“写入”文件
  2. 打开“读取”文件
  3. 遍历“读取”
  4. 写入“写入”文件
with open(path + 'write_file.txt', 'wb') as txtout:
    with open(path + 'read_file.txt', 'rb') as txtin:
        for line in txtin:
            txtout.writelines(line)

有什么理由先打开输入文件吗?而不是先打开输出文件?

【问题讨论】:

标签: python file


【解决方案1】:

1) 先打开输入文件,再打开输出文件。这样,如果输入文件不存在,您可以在没有首先创建(现在无用的)输出文件的情况下报告该错误。

2) 遍历输入文件(正如您所做的那样),而不是调用file.read()file.readlines()。调用其中一个函数可以使用基本上无限量的内存。

3) 在您给出的特定情况下,使用shutils.copyfileobjshutils.copyfile

【讨论】:

  • 1 - 不正确。如果您的读取文件不存在,您将始终收到错误消息。在之前或之后打开它。
  • 这不是重点。首先检查输入文件可以避免在输入不存在的情况下进行清理。
  • @hagubear - 我已经重写了第一点。希望这能更好地解释逻辑。
  • 是否有特定原因说明您为什么要复制输入文件而不是对其进行迭代?对于上面的示例,我遍历输入文件以从中提取数据并创建输出文件。复制输入文件有什么好处吗?顺便说一句,我现在开始首先在我的程序上打开输入文件,但是我总是在运行程序之前使用 if 语句检查文件是否存在..
【解决方案2】:

您可以执行以下任一操作:

with open("file_write", 'w') as f1, open("file_read") as f2:
      # bla bla bla

或者这个:

with open("file_read") as f1, open("file_write", 'w') as f2:

没有区别。当然,如果您的输入文件确实存在的话。使用 'w' 标志,文件将被创建/覆盖以防万一它不存在。但是read 操作的文件对象将返回为“False”,即不存在。事实上,只要你想访问不存在的读取文件,它就会产生错误。

【讨论】:

    【解决方案3】:

    我建议先阅读该文件。如果文件不存在并且写入操作不会开始,则会出现错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 2013-08-17
      • 2016-01-13
      • 1970-01-01
      • 2015-04-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多