为什么file.read()不读取第一行?

时间:2012-06-09 22:17:55

标签: python file-io python-2.5

我不知道为什么,但是当我尝试使用file.read()读取文件时,Python无法识别文件的第一行..这是一个解释器错误,或者这是我的错? / p>

此处有一份程序副本(显示阅读结果):http://pastebin.ubuntu.com/1032832/

这是导致问题的代码:

if wfile.readline() != "#! /usr/bin/env python\n":
    before = wfile.read()
    wfile.seek(0)
    wfile.write('#! /usr/bin/env python\n' + before)
    wfile.close()
    os.chmod(file, 777)

我用于测试的Python版本是适用于iOS的Python 2.5.1(Cydia端口)。我的设备是iPad 2。

2 个答案:

答案 0 :(得分:6)

您正在使用readline()语句中的if函数读取文件的第一行。当你到达read()时,第一行已被阅读。

后续的write()会写出wfile.read()已阅读的内容。

看起来您要检查文件的第一行是否包含相应的#!/usr/bin/...行。如果没有,您希望将其插入当前第一行之前,然后在其下面写下原始第一行。这样就可以了:

with open(file, 'r+') as wfile:
   before = wfile.readline()
   if before != "#! /usr/bin/env python\n":
      wfile.seek(0)
      wfile.write('#! /usr/bin/env python\n' + before)

这样您可以将原始第一行保存在变量before中供以后使用。

注意 :完成后,使用with 将自动为您关闭文件,或遇到异常。

答案 1 :(得分:0)

import os

file_name = 'foo.py'
shebang = '#!/usr/bin/env python'

with open(file_name, 'r') as f:
    lines = f.read().splitlines()
if shebang not in lines[0]:
    lines.insert(0, shebang)
    with open(file_name, 'r+') as f:
        f.write('\n'.join(lines))

os.chmod(file_name, 777)