28

たとえば、次のようなファイルがあります。

first line
second line

third line

その結果、次のことを取得する必要があります。

first line
second line
third line

Pythonのみを使用してください

4

9 に答える 9

43

このwithステートメントは、ファイルを自動的に開いたり閉じたりするのに優れています。

with open('myfile','rw') as file:
    for line in file:
        if not line.isspace():
            file.write(line)
于 2010-03-03T07:55:21.800 に答える
35
import fileinput
for line in fileinput.FileInput("file",inplace=1):
    if line.rstrip():
        print line
于 2010-03-03T07:39:05.430 に答える
13
import sys
with open("file.txt") as f:
    for line in f:
        if not line.isspace():
            sys.stdout.write(line)

別の方法は

with open("file.txt") as f:
    print "".join(line for line in f if not line.isspace())
于 2010-03-03T07:56:12.947 に答える
4

あなたが Python について尋ねたことは知っていますが、Win と Linux についてのあなたのコメントは、あなたがクロスプラットフォーム性を求めていることを示しており、Perl は少なくとも Python と同じくらいクロスプラットフォームです。これは、コマンド ラインで Perl を 1 行使用するだけで簡単に実行できます。スクリプトは必要ありません。perl -ne 'print if /\S/' foo.txt

(私は Python が大好きで、99% の確率で Perl よりも Python を好みますが、Perl に -e スイッチを使用して実行できるように、Python でコマンドライン スクリプトを実行できることを本当に望んでいます!)

とはいえ、次の Python スクリプトは機能するはずです。これを頻繁に行う場合や大きなファイルの場合は、正規表現もコンパイルして最適化する必要があります。

#!/usr/bin/python
import re
file = open('foo.txt', 'r')
for line in file.readlines():
    if re.search('\S', line): print line,
file.close()

これを行う方法はたくさんありますが、これは 1 つにすぎません :)

于 2010-03-03T07:54:45.713 に答える
1
>>> s = """first line
... second line
... 
... third line
... """
>>> print '\n'.join([i for i in s.split('\n') if len(i) > 0])
first line
second line
third line
>>> 
于 2010-03-03T07:31:48.280 に答える
0

以下のプログラムのようなものを試しましたか?

for line in open(filename):
    if len(line) > 1 or line != '\n':
        print(line, end='')
于 2010-03-04T00:01:50.960 に答える
0

以下の方法を使用して、すべての空白行を削除できます。

with open("new_file","r") as f:
 for i in f.readlines():
       if not i.strip():
           continue
       if i:
           print i,

以下の方法を使用して、出力をファイルに書き込むこともできます。

with open("new_file","r") as f, open("outfile.txt","w") as outfile:
 for i in f.readlines():
       if not i.strip():
           continue
       if i:
           outfile.write(i)            
于 2016-12-22T18:35:46.017 に答える