如何优化此脚本

时间:2011-01-08 12:43:12

标签: python optimization

我写了以下脚本。它打开一个文件,从中读取每一行,用新行字符分割并删除第一个字符。如果存在行,则将其添加到数组中。接下来,数组的每个元素都按空格分割,按字母顺序排序并再次连接。打印每一行是因为脚本是从控制台触发的,并使用标准输出将所有内容写入文件。我想优化这个代码更加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()

5 个答案:

答案 0 :(得分: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()))

答案 1 :(得分:1)

为什么要创建列表arr?该文件已经是一个序列。除非再次迭代,为什么要创建arr并且不对它做任何事情。

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

答案 2 :(得分:0)

您可以在第一个循环中压缩第二个循环:

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()

答案 3 :(得分:0)

用于小文件:

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)

答案 4 :(得分: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()