2009-08-13 22 views
25

私は完全なPython noobです。ファイルの各行の先頭から2文字を削除するにはどうすればよいですか?あなたは良いスタートを切った行の先頭から2文字を削除するには

+3

チュートリアル(http://docs.python.org/tutorial/)をお読みください。あなたが探していたのは導入の頃です(「文字列」を参照)。 – hop

答えて

59

#!/Python26/ 

import re 

f = open('M:/file.txt') 
lines=f.readlines() 

i=0; 
for line in lines: 
    line = line.strip()  
    #do something here 
+5

初心者レベルの説明のための質問*と*の文脈で答えを提供するための+1。 – mhawke

20

String slicingお手伝いを致します:::

>>> a="Some very long string" 
>>> a[2:] 
'me very long string' 
0

ジャストラインを使用して、[2]私はこのような何かをしようとしていました。あなたのループでこれを試してみてください:

for line in lines: 
    line = line[2:] 
    # do something here 

[2:]「slice」構文が、それは基本的に私には終わり以来、(最後にインデックス2から始まり、続けてこのシーケンスの一部を与える」と言うと呼ばれていますポイント)がコロンの後に指定されました

10

代わりにforループを使用するのでは、あなたがAAリストの内包と幸せになるかもしれません:。ただ、好奇心など

[line[2:] for line in lines] 

、をチェックしますかunixツール。

$ cut -c2- filename 

-cのスライシング構文は、pythonの構文と非常によく似ています。

10

だけヒントとして、あなたは

for line in open('M:/file.txt'): 
    line = line[2:] 

にあなたのプログラムを短縮することができますし、あまりにも行番号を運ぶために必要がある場合は、修正したい場合は

for i, line in enumerate(open('M:/file.txt.')): 
    line = line[2:] 
2
for line in open("file"): 
    print line[2:] 
3

を使用しますファイルの内容は、文字列を処理するだけでなく、fileinputinplaceパラメータを試してください:

# strip_2_chars.py 
import fileinput 
for line in fileinput.input(inplace=1): 
    print line[2:] 

すると、コマンドラインで:

python strip_2_chars.py m:\file.txt 
1

あなたは、Pythonは文字列に対処するためのいくつかの素晴らしい方法があります見つけることができます。チェックアウトしたい他の便利な文字列メソッドは、split()、replace()、startswith()/ endswith()などです。

3

間の微妙な、まだ重要な違いがあることを知って興味深いものがあります

file = open(filename) 
lines = file.readlines() 
for line in lines: 
    do something 

file = open(filename) 
for line in file: 
    do something 

readlines付き)最初のソリューションは、全体の内容をロードしますメモリにファイルを格納し、(文字列の)pythonリストを返します。一方、第2の解決策は、iteratorと呼ばれるものを利用しています。実際には、必要に応じてファイル内のポインタを移動し、文字列を返します。これは重要な利点があります:ファイルがメモリにロードされていません。小さなファイルの場合は、どちらの方法もOKです。しかし、ファイルごとに行単位でしか作業しない限り、イテレータの動作を直接使用することをお勧めします。

だから私のソリューションは、次のようになります。

infile = open(filename) 
outfile = open("%s.new" % filename, "w") 
for line in infile: 
    outfile.write(line[2:]) 
infile.close() 
outfile.close() 

は、そういえば:それは(Latin-1のエンコードなど)非ASCIIファイルの場合は、codecs.openを使用することを検討してください。それ以外の場合は、誤って半角でマルチバイト文字を切り捨てる可能性があります)

しかし、Pythonを必要としない場合は、ファイルから最初の2文字を切り抜くだけです、それを行うための最も効率的な方法は、KCHの提案であるとcutを使用します。私はいつもcygwinは私のLinux以外のツゲにインストールされている間に合わせと、ファイル操作のこれらの種類の

cat filename | cut -d2- > newfile 

を。しかし、Cygwin iircよりも速く実行するこれらのツール用のWindowsバイナリがあると思います。

0

あなたはPythonを学んでいるので、Pythonで提供されているツール(スライス、分割、置き換え、その他すべてが言及されています)を考えれば、正規表現が過度に使用されていることがわかります。したがって、あなたの例の冒頭にある

import re 

は、厳密に必要な場合としない場合があります。

-1

あまり効率的ではありませんが、うまく動作します。かなり複雑に見えます。

print line[-(len(line)-2):] 
+0

なぜこれで答えが得られないのですか? – JJJ

+0

答えが のように複雑に見える –

+0

純粋なコーディングが関係している場合の論理を説明してください。コードスニペットは何を行い、どのように問題を解決しますか? OPはPythonには新しいので、コードをよく理解するのに役立ちます。 – Jeet

関連する問題