0

理由はわかりませんが、file.read() でファイルを読み込もうとすると、Python がファイルの最初の行を認識しません。インタープリターのバグですか、それとも私のせいですか?

ここにプログラムのコピーがあります (読み取り結果を表示): 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 です。

4

2 に答える 2

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このようにして、後で使用するために元の最初の行を変数に保存します。

: using を使用、作業が終了したとき、または例外が発生したときwith に、ファイルが自動的に閉じられます。

于 2012-06-09T22:19:26.427 に答える
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)
于 2012-06-10T00:34:30.237 に答える