【问题标题】:Python version issues using open使用 open 的 Python 版本问题
【发布时间】:2012-12-02 21:22:07
【问题描述】:

使用open 的Python 版本之间是否存在任何潜在差异。我的脚本接受一个文件,执行一些计算并输出这些计算。

在我的机器上(运行 2.7.1)输出是正确的。在另一台机器(运行 2.4.6)上,我的输出全部为 0.00。最近我可以说,我的输入文件没有被打开。 open() 这些版本之间有区别吗?

这是我目前的开放方案的样子:

infile = open(filename, 'r')

另一个问题:next(infile) 方法不再为我跳过2.6.4 中的第一行。将next(infile) 替换为lines = infile.readlines()[1:0] 会影响性能吗?

编辑:废话另一台机器的版本是 2.4.6。不知道我是怎么搞砸的。原来的帖子反映了我的错误,对不起。

Edit2:下面是我从文件中读取的代码:

     for lines in infile:
          # do stuff with lines
     infile.close()

我猜这里有些东西可能在 2.4.6 和 2.7.1 之间有所不同

最终编辑:

解决了我自己的问题。 next(infile) 由于某些奇怪的原因与 2.4.6 不兼容。我替换了它并正确运行了我的脚本。

感谢您的帮助!

【问题讨论】:

  • 它不太可能与open(..) 函数有关,您应该发布计算代码的详细信息(发行说明的完整列表为here)。例如 this answer 提到 round(..) 在 2.7 中已修复。
  • 如果你有两个不同的问题,你应该问两个不同的问题:)。检查性能的一种简单方法是在 ipython 中使用 %timeit thing_to_test...
  • 我猜这是数据文件的问题。 Python 在 2.6 和 2.7 之间没有显着改变,如果您使用的是 2.6 中没有的仅 2.7 功能,它可能会抱怨,而不是默默地给您错误的答案。
  • 我需要它工作的机器版本是 2.4.6。我很抱歉。修改反映了我的错误。
  • @AndreHolzner 添加了更多代码

标签: python


【解决方案1】:

我认为open 没有发生此类更改。

关于你问题的后半部分,

lines = infile.readlines()[1:0] 总是[],你可能需要的是lines = infile.readlines()[1:]

是的,当使用next 时,使用readlines 将整个文件(准确地说是它的所有行)加载到内存中仅读取第一行(如果不执行some_thing = next(f),则将其丢弃)。

如果您正在读取一个大文件,这可能会影响性能。对于一个小文件,它不会有太大的不同。

【讨论】:

  • 确认!领先我一分钟
猜你喜欢
  • 2017-11-05
  • 1970-01-01
  • 1970-01-01
  • 2012-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-15
相关资源
最近更新 更多