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