python导入文件名并按字母顺序排序

python导入文件名并按字母顺序排序,python,file,while-loop,Python,File,While Loop,我不明白为什么我的简单名称脚本不能工作。它似乎在while循环中出错。我可能打错电话了,但我想在我继续研究的过程中,我可能会尝试在这里找到答案 #!/usr/bin/python #open the file name_file = open('names.txt', 'r') #read in lines names = name_file.readlines() #close file name_file.close() #loop to place names in array i

我不明白为什么我的简单名称脚本不能工作。它似乎在while循环中出错。我可能打错电话了,但我想在我继续研究的过程中,我可能会尝试在这里找到答案

#!/usr/bin/python

#open the file
name_file = open('names.txt', 'r')

#read in lines
names = name_file.readlines()

#close file
name_file.close()

#loop to place names in array
index = 0
        while index < len(names):
             names[index] = names[index].rstrip('\n')
             index += 1
#sort
names.sort()

#print sorted names
print names
#/usr/bin/python
#打开文件
name_file=open('names.txt','r')
#排队阅读
names=name\u file.readlines()
#关闭文件
name_file.close()
#循环以在数组中放置名称
索引=0
而索引
也许这样可以:

with open ('names.txt', 'r') as f:
    names = sorted (name.rstrip ('\n') for name in f)

print (names)
带有
负责在离开作用域后关闭文件

with open('names.txt', 'r') as f:
    names = sorted(f.readlines())

for (i, name) in enumerate(names):
    names[i] = name.rstrip('\n')
这应该能奏效


对于这类事情,最好使用for循环。

你说的“不工作”是什么意思?作为将来的参考,以这种方式编写
循环是额外的工作,很容易出错。只需对范围内的索引(len(name))执行
或者更好的是,对枚举中的索引、名称执行
(name):
。(或者,也许更好,将整个过程转化为列表理解或genexpr。)另一方面,最好使用带有open('names.txt')的
作为名称文件:
,而不是显式的
close
,而且。我是个白痴。我不知道我想用循环实现什么,但我删除了它,它按设计工作。\n你不是白痴。你在学习,这是重要的一部分。你不能从成功中学习,你要从错误中学习。要么是你自己的,要么是别人的。@Hyperboreus:你为什么在这个地方加那么多额外的空间?OP正在编写漂亮的PEP8风格代码;鼓励他不要这样做可能不是个好主意。我不喜欢PEP8风格。这就是全部。对不起。但是我考虑了你关于
strip
rstrip
的信息。实际上,我真的不想鼓励任何编码风格。也不赞成或反对任何风格。我只想用我个人喜欢的风格,这不管用;
i
来自哪里?(还有,为什么要在没有分号或不需要分号的代码中添加额外的分号呢?)。我会纠正这个答案,Jocke,你可能想看看这里:@Hyperboreus是的,我知道什么是列表理解,以及如何使用它们。但我并没有用python来说明何时实际使用它们。Haskell中也有列表理解,而且很少使用。