我正在尝试对导入的列表进行排序,然后显示它,但我尝试了各种各样的事情,但它没有用。
以下是列表的例子:
pommes : 54
bananes : 18
oranges : 30
ananas :12
clémentines :77
cerises de terre: 43
输出应按字母顺序排列
这就是我得到的
['\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '0', '1', '1', '2',
'3', '3', '4', '4', '5', '7', '7', '8', ':', ':', ':', ':', ':', ':', 'a', 'a', 'a', 'a', 'a', 'a', 'b', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e', 'e', 'e', 'e'
, 'e', 'e', 'g', 'i', 'i', 'l', 'm', 'm', 'm', 'n', 'n', 'n', 'n', 'n', 'n', 'n', 'o', 'o', 'p', 'r', 'r', 'r', 'r', 's', 's', 's', 's', 's', 's', 's', 't', 't
', 'é']
这是我的代码
import sys
def liste(entree):
try:
ouvrir = open("data2.txt")
except IOError:
message1 = "Le fichier data2 n'existe pas."
return message1
lecture = ouvrir.read()
if len(entree) < 1:
message2 = "Il faut préciser le nom du fichier à traiter"
return message2
elif len(entree) > 1:
message3 = "Un seul argument est attendu, soit le nom du fichier à traiter."
return message3
else:
return lecture
def main():
while True:
entree = sys.argv[1:]
choix = str(entree)
texte = "data2.txt"
if texte in choix:
message4 = liste(entree)
message4 = sorted(message4)
print(message4)
break
else:
print("Il faut préciser le nom du fichier à traiter")
exit()
if __name__ == "__main__":
main()
答案 0 :(得分:2)
你需要在这里使用readlines
方法,它将行读入列表,而不是read
方法,它将所有内容都返回到字符串中。
lecture = ouvrir.readlines()
最终节目:
import sys
def liste(entree):
try:
ouvrir = open("data2.txt")
except IOError:
message1 = "Le fichier data2 n'existe pas."
return message1
lecture = ouvrir.readlines()
if len(entree) < 1:
message2 = "Il faut préciser le nom du fichier à traiter"
return message2
elif len(entree) > 1:
message3 = "Un seul argument est attendu, soit le nom du fichier à traiter."
return message3
else:
return lecture
def main():
while True:
entree = sys.argv[1:]
choix = str(entree)
texte = "data2.txt"
if texte in choix:
message4 = liste(entree)
print(message4)
message4 = sorted(message4)
print(message4)
break
else:
print("Il faut préciser le nom du fichier à traiter")
exit()
if __name__ == "__main__":
main()
运行:
$ python3 french-program.py data2.txt
['Orange\n', 'Apple\n', 'Banada']
['Apple\n', 'Banada', 'Orange\n']
答案 1 :(得分:1)
尝试使用readlines,(请参阅此回答:How do I read a file line-by-line into a list?,另请参阅:Reading a text file and splitting it into single words in python)。
哦,并且打开()&#39;是惯用的(比尝试更多),
with open("data2.txt") as ouvrir:
lines = ouvrir.readlines()
print sorted(lines)
假设每行包含一个单词,您就完成了。
假设您希望将每一行视为单词(每行一个或多个单词),对每行的单词进行排序,并对行进行排序,
#open file "data2.txt" and readlines into list
#split each line into words and sort that list of sorted lines
#words = list ( list ( word ) )
with open("data2.txt") as ouvrir:
lines = ouvrir.readlines()
line_words = [ x for x in [ line.split(":") for line in lines ] ]
#line_names = [ x[0] for x in [ line.split(":") for line in lines ] ]
print sorted(line_words)
假设每一行都有一个或多个单词,并且您想要一个排序的单词列表?以下内容将嵌套的单词列表展平为单个单词列表
#open file "data2.txt" and readlines into list
#split each line into words, flatten into single list of words
#words = list ( word )
with open("data2.txt") as ouvrir:
lecture = ouvrir.readlines()
words = [ word for line in lecture for word in line.split() ]
print sorted(words)
假设您的行具有键:值对,例如&#34; Apple:23&#34;?,然后你想要一些不同的东西
您的程序将检查主菜(切片sys.argv [1:])与打开和读取文件相结合。你应该分开这两个功能。这是修改代码的一种方法,
import sys
def liste(texte,entree):
if len(entree) < 1:
return "Il faut préciser le nom du fichier à traiter"
elif len(entree) > 1:
return "Un seul argument est attendu, soit le nom du fichier à traiter."
with open(texte) as ouvrir:
lecture = ouvrir.readlines()
words = [ x.split(":")[0].strip() for x in [ line.strip() for line in lecture ] ]
words = [ x for x in words if len(x) > 1 ] #filter, remove short words (blanks)
return lecture
return "Le fichier {} n'existe pas.".format(texte)
def main():
while True:
entree = sys.argv[1:]
choix = str(entree)
texte = "data2.txt"
if texte in choix:
message4 = sorted(liste(texte,entree))
print(message4)
for el in message4: print(el)
break
else:
print("Il faut préciser le nom du fichier à traiter")
break
if __name__ == "__main__":
main()
exit()
答案 2 :(得分:1)
您的陈述
ouvrir = open("data2.txt")
lecture = ouvrir.read()
的工作方式如下:open("data2.txt")
返回您的文件对象
标签名为ouvrir
,方法.read()
返回一个字符串
与"data2.txt"
的内容一致,并标明此内容
字符串为lecture
。
当您引用lecture
时,您引用字符串而不是列表...
解决问题的一种聪明方法是使用字符串方法:
splitlines()
;它接受一个字符串并返回一个元素列表
是通过在换行符之间拆分原始字符串而获得的字符串。
lecture = ouvrir.read() # lecture is a string
lecture = lecture.splitlines() # lecture is now a list of strings (lines)
这就是你需要继续前进的。请注意,作为 原始内容在换行符上分割,没有换行符(即&#39; \ n&#39; 字符)在你要排序的行中不再存在......
要完成我的回答,我必须提到方法可以链接
lecture = ouvrir.read().splitlines()
另一种可能性是单独留下您的liste()
功能(请注意
liste
是一个误导性的名称,因为你的函数返回一个字符串,而不是一个字符串
list ...)并对liste
返回的字符串进行后处理 - 或者我
更确切地说,其他可能性,即使&#34;应该有一个 - 和
最好只有一种 - 明显的方式来做到这一点&#34; ...
(...)
if texte in choix:
message4 = liste(entree) ## m4 is a string of characters
message4 = message4.splitlines() ## m4 is a list of strings,
## one string <-> one line in file
message4 = sorted(message4) ## m4 contents are sorted now
for line in message4: ## let's do something for each line in m4
if line: ## that is, if the line contains something
print(line)
print('############################# alternative')
lines = sorted(l for l in liste(entree).splitlines() if l)
for line in lines: print(line)
print('############################# alternative')
for line in sorted(l for l in liste(entree).splitlines() if l): print(line)
print('############################# alternative')
print('\n'.join(sorted(l for l in liste(entree).splitlines() if l)))
break
else:
(...)