6

値 2000,00 を含むファイルがあります。

ただし、2000,00 の後にスペースと空行が含まれています。

すべてのスペースと空行を削除したいのですが、誰かがアイデアを与えることができれば、いくつかの方法を試しましたが成功しませんでした。

私が疲れた1つの方法は以下の通りです

    # Read lines as a list
fh = open("transfer-out/" + file, "r")
lines = fh.readlines()
fh.close()
# Weed out blank lines with filter
lines = filter(lambda x: not x.isspace(), lines)
# Write "transfer-out/"+file+".txt", "w"
fh = open("transfer-out/"+file, "w")
#fh.write("".join(lines))
# should also work instead of joining the list:
fh.writelines(lines)
fh.close()
4

5 に答える 5

8

strip()先頭および末尾の空白文字を削除します。

with open("transfer-out/" + file, "r") as f:
    for line in f:
        cleanedLine = line.strip()
        if cleanedLine: # is not empty
            print(cleanedLine)

python clean_number.py > file.txt次に、たとえば、スクリプトをファイルにリダイレクトできます。

于 2012-05-29T06:44:31.770 に答える
4

リスト内包表記を持つ別のもの:

clean_lines = []
with open("transfer-out/" + file, "r") as f:
    lines = f.readlines()
    clean_lines = [l.strip() for l in lines if l.strip()]

with open("transfer-out/"+file, "w") as f:
    f.writelines('\n'.join(clean_lines))
于 2012-05-29T06:47:39.350 に答える
2

次のジェネレーターを使用するように「lines」行を変更すると、うまくいくはずです。

lines = (line.strip() for line in fh.readlines() if len(line.strip()))
于 2012-05-29T06:51:23.143 に答える
1

機能的なもの:)

import string
from itertools import ifilter, imap

print '\n'.join(ifilter(None, imap(string.strip, open('data.txt'))))
# for big files use manual loop over lines instead of join

使用法:

$ yes "2000,00  " | head -n 100000 > data.txt
$ python -c "print '\n'*100000" >> data.txt
$ wc -l data.txt 
200001 data.txt
$ python filt.py > output.txt
$ wc -l output.txt 
100000 output.txt
于 2012-05-29T07:20:45.123 に答える
1

これはあなたが望むように動作するはずです:

file(filename_out, "w").write(file(filename_in).read().strip())

編集:以前のコードは python 2.x で動作しますが、python 3 では動作しません (@gnibbler コメントを参照) 両方のバージョンでこれを使用します:

open(filename_out, "w").write(open(filename_in).read().strip())
于 2012-05-29T06:45:30.503 に答える