3

Pythonスクリプトを実行可能にする簡単なプログラムを開発しており、インタープリターパス(#! /usr/bin/python)を追加する部分で作業しています。私はそれをやろうとしましたが、新しい行を追加する代わりに、現在の行を置き換えて次の行の一部削除します。私が間違っていることは何ですか?

ソース コードを Ubuntu Pastebin にアップロードしました: http://pastebin.ubuntu.com/1032683/ 28 行目と 31 行目の間に間違ったコードがあります。

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

Python 2.7.2 を iPad 2 ( Python for iOS ) で使用し、同じ iPad (Cydia ポート) で 2.5.1 をテスト用に使用します。

4

3 に答える 3

6

やろうとしていることはできません。ファイルの先頭にシークして書き込みを行うと、追加ではなく、その位置から上書きされます。

ファイルの途中 (または先頭) に行を追加する唯一の方法は、必要な場所にデータが挿入された新しいファイルを書き出すことです。

于 2012-06-09T20:43:58.907 に答える
3

Joeは、ファイルの先頭に行を「挿入」するだけではいけないという点で正しいです。ただし、これが解決策です。

with open(my_python_script, "r+") as f:
    first_line = f.readline()
    if first_line != "#! /usr/bin/python\n":
        lines = f.readlines()
        f.seek(0)
        f.write("#! /usr/bin/python\n")
        f.write(first_line)
        f.writelines(lines)         
于 2012-06-09T20:59:23.780 に答える
2

コマンドラインで指定された各ファイルの最初の行を追加/置換するには:

#!/usr/bin/env python
import fileinput

shebang = "#! /usr/bin/python\n"
for line in fileinput.input(inplace=1):
    if fileinput.isfirstline() and line != shebang:
       print shebang,
       if not line.startswith("#!"): 
          print line,
    else:
       print line,
于 2012-06-09T21:11:13.703 に答える