2016-09-19 16 views
0

私はpyでテキストを単純に解析しようとしていますが、tr '\ n' ''を使ってbashに問題はありません。基本的には、すべての行を1行にまとめることです。 Pythonプリントラインでは私が理解しているものとは少し違っています。私が出力に印刷しても存在しないので、re.subは私の新しい行を見つけることができません。誰かが私はこの問題を回避する方法を説明することができますPythonで?ここで行の行を読むときにPythonで改行を置き換えます。

は、これまでの私のコードです:

# -*- iso-8859-1 -*- 
import re 
def proc(): 
    f= open('out.txt', 'r') 
    lines=f.readlines() 
    for line in lines: 
     line = line.strip() 
     if '[' in line: 
      line_1 = line 
      line_1_split = line_1.split(' ')[0] 
      line_2 = re.sub(r'\n',r' ', line_1_split) 
      print line_2 
proc() 

は編集:私は「印刷ラインは、」改行せずに印刷することがわかっています。問題は、私が行ごとに操作を行う前と後の両方でこれらの行を処理する必要があるということです。シェルのコードでは、sed、awk、trを使ってこれを行います。

+0

'line.strip()' '\のN 'を含め、_all_大手&末尾の空白を削除します。ところで、行単位で処理したいのであれば、ファイル全体を 'readlines'でリストに読み込んだ後、リストを反復するのではなく' for line in f: 'を実行する方が良いでしょう。 –

+2

'print'は、出力の最後に改行を追加します。 http://stackoverflow.com/q/493386/2800918 – CAB

+0

@CABの意味を参照してください – badner

答えて

0

replace()メソッドを使用してください。

file = open('out.txt', 'r') 
data = file.read() 
file.close() 
data.replace('\n', '') 
+0

これは問題を解決しません。文字列の中に始まる行はなかったので、置き換えは何もしません。問題は実際にはprintステートメントにあります。 – Zizouz212

+0

python3では 'print( 'text'、end = '')'を使って改行をエスケープすることができます。 – Laszlowaty

+0

これはPython 3ではありませんが、Python 2です。答えはまだ質問の問題を逃しています。 – Zizouz212

1

あなたはprintの自動改行を避けるために、標準出力に直接書き込むことができます。これは、単一の行にfoobarを印刷します

from sys import stdout 
stdout.write("foo") 
stdout.write("bar\n") 

+0

これは最高の答えだと思います。しかし、それは最も効率的だと思われます。 – badner

1

printステートメントを呼び出すと、新しい行が自動的に追加されます。カンマを追加するだけです:

print line_2, 

そして、すべて同じ行に印刷されます。

マインドあなたは、ファイルのすべての行を取得し、単一の行にそれらを印刷しようとしている場合は、これを行うには、より効率的な方法があります:

また
with open('out.txt', 'r') as f: 
    lines = f.readlines() 
    for line in lines: 
     line = line.strip() 
     # Some extra line formatting stuff goes here 
     print line, # Note the comma! 

、ちょうどラインに参加文字列上:

everything_on_one_line = ''.join(i.strip() for i in f.readlines()) 
print everything_on_one_line 
+0

これはコアの問題では機能しますが、前後の各行で操作を処理するのは容易ではありません。 – badner

1

withを使用すると、繰り返し後にファイルを閉じることができます。

イテレーションはメモリを節約し、ファイル全体をロードしません。

rstrip()は最後に改行を削除します。

組み合わせ:

with open('out.txt', 'r') as f: 
    for line in f: 
     print line.rstrip(), 
+0

これは動作しますが、何かに印刷する必要があります。私はvar = print行することができればそれはいいだろうが、それはtaht方法では動作しません – badner

関連する問題