2011-01-08 5 views
1

私は次のスクリプトを書いています。ファイルを開き、改行文字で区切って各行を読み込み、行頭の最初の文字を削除します。行が存在する場合は配列に追加されています。配列の各要素は空白で分割され、アルファベット順にソートされ、再び結合されます。スクリプトはコンソールから起動され、すべてを標準出力を使ってファイルに書き込むため、すべての行が出力されます。私はより多くのpythonicにこのコードを最適化したいと思います。何か案は ?このスクリプトを最適化する方法

import sys 

def main(): 
    filename = sys.argv[1] 
    file = open(filename) 
    arr = [] 
    for line in file: 
     line = line[1:].replace("\n", "") 
     if line: 
      arr.append(line) 

    for line in arr: 
     lines = line.split(" ") 
     lines.sort(key=str.lower) 
     line = ''.join(lines) 
     print line 

if __name__ == '__main__': 
    main() 
+2

なぜ 'arr'リストを作成しますか?ファイルは既にシーケンスです。なぜあなたは 'arr'を作り、何もしないのですか? –

答えて

1

なぜリストを作成するのですかarr?ファイルは既にシーケンスです。 arrを作成していて、もう一度繰り返し実行する以外は何もしません。小さなファイルのため

import sys 

def main(): 
    filename = sys.argv[1] 
    file = open(filename) 
    for line in file: 
     if line.strip(): 
      lines = line.split(" ") 
      lines.sort(key=str.lower) 
      print ''.join(lines) 

if __name__ == '__main__': 
    main() 
+0

ほとんどOKですが、これは空白行を追加します – marks34

+0

私のバージョンは – rubik

+0

ではありませんこれは良いバージョンです。私はそれが最も重要だと思います。 – Anders

0

あなたは最初の1で第二のループを凝縮することができます

import fileinput 

lines = [] 
for line in fileinput.input(): 
    line = line[1:].strip() 
    if line: 
     words = line.split() 
     words.sort(key=str.lower) 
     lines.append(' '.join(words)) 
print '\n'.join(lines) 

を大きなファイルのために:

import fileinput 

for line in fileinput.input(): 
    line = line[1:].strip() 
    if line: 
     words = line.split() 
     words.sort(key=str.lower) 
     print ' '.join(words) 
2
def main(): 
    file = open(sys.argv[1]) 

    for line in file: 
     if line.rstrip(): 
      print ''.join(sorted(line[1:-1].split(), key=str.lower())) 
+0

もし 'line.strip()'ではないはずですか? – rubik

+0

@rubik:はい、ありがとうございました。この場合にはrstrip()がより好ましい。 – mouad

+0

は空行を出力します。 – marks34

0

for line in file: 
    line = line[1:].replace("\n", "") 
    if not line: continue 
    lines = line.split(" ") 
    lines.sort(key=str.lower) 
    line = ''.join(lines) 
    print line 
0
import fileinput 

def main(): 
    for line in fileinput.input(): 
     words = line[1:].split() # strip() is redundant 
     if words: 
      words.sort(key=str.lower) 
      print ' '.join(words) 

if __name__=="__main__": 
    main() 
関連する問題