按字母表顺序对文本文件进行排序(Python)

21

我想按字母顺序排列名为“shopping.txt”的文件。

shopping = open('shopping.txt')
line=shopping.readline()
while len(line)!=0:
    print(line, end ='')
    line=shopping.readline()
#for eachline in myFile:
#    print(eachline)
shopping.close()
5个回答

58

只是为了展示一些不同的东西,而不是在Python中完成这个任务,您可以在Unix系统的命令行中执行此操作:

sort shopping.txt -o shopping.txt

而且您的文件已经排序。当然,如果您真的希望用Python实现这一点:很多其他人提出的读取文件并进行排序的解决方案也可以正常工作。


1
比起从头开始编写脚本,这样做更好。 - VishalDevgire

29

使用sort()sorted()函数是实现这一点的简单方法。

lines = shopping.readlines()
lines.sort()

或者:

lines = sorted(shopping.readlines())
缺点是你必须将整个文件读入内存,但如果这不是问题,你可以使用这个简单的代码。

17

使用sorted函数。

with open('shopping.txt', 'r') as r:
    for line in sorted(r):
        print(line, end='')

1
请问这个程序会将所有行都存储在内存中吗?它是如何工作的?它是惰性读取输入吗? - Akshay Hazari
2
@AkshayHazari:sorted()会将所有行都加载到内存中。为了避免加载所有行,你可以调用外部的sort命令或者在Python中实现它 - jfs
1
这个如何替换现有的文件? - StressedBoi69420

1

使用pathlib,您可以使用以下功能:

from pathlib import Path

file = Path("shopping.txt")
print(sorted(file.read_text().split("\n")))

如果您想在磁盘上对文件进行排序

from pathlib import Path

file = Path("shopping.txt")
file.write_text(
    "\n".join(
        sorted(
            file.read_text().split("\n")
        )
    )
)

0

试一下这个

shopping = open('shopping.txt')
lines = shopping.readlines()
lines.sort()
for line in lines:
    print(line)

1
需要在此之后关闭已打开的文件或使用with语句作为外部上下文管理器。 - Sysanin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接