Python:如何对文本文件排序两次并拆分成不同文件?

1 投票
4 回答
715 浏览
提问于 2025-04-16 12:20

我该如何先按行的长度排序,然后再按字母顺序排序,最后根据行的长度把内容分成不同的文件呢?

我有一个这样的单词列表文件:

a

actors

an

b

batter

but

我需要为每种行长度创建一个文件(比如1.txt、2.txt),并且每个文件里的内容要按字母顺序排列。这个怎么做呢?

最终生成的文件应该是这样的:

1.txt

a
b
...

2.txt

an
by
...

等等。

4 个回答

0

补充一下之前的回答:

files = {}
for word in sort(words, lambda a,b: (len(a) < len(b)) if (len(a) != len(b)) else (a < b)):
    if len(word) not in files:    
         files[len(word)] = open("{0}.txt".format(len(word)), "w")
    files[len(word)].write("{0}\n".format(word))             
1

你可以把一个函数放进排序里。比如可以用这样的写法:lambda a, b: (len(a) < len(b)) if (len(a) != len(b)) else (a < b)。这个意思是,如果两个东西的长度不一样,就比较它们的长度;如果长度一样,就比较它们的内容。

1

这段代码的意思是……

首先,它定义了一个变量,这个变量可以用来存储一些信息。接着,它可能会进行一些操作,比如计算、比较或者是处理数据。最后,代码可能会输出结果,告诉我们计算的结果是什么。

总的来说,这段代码的目的是为了让计算机完成一些特定的任务,帮助我们更方便地处理信息。

from collections import defaultdict

OUTF = "{0}.txt".format

def sortWords(wordList):
    d = defaultdict(list)
    for word in wordList:
        d[len(word)].append(word)
    return d

def readWords(fname):
    with open(fname) as inf:
        return [word for word in (line.strip() for line in inf.readlines()) if word]

def writeWords(fname, wordList):
    wordList.sort()
    with open(fname, 'w') as outf:
        outf.write('\n'.join(wordList))

def main():
    for wordLen,wordList in sortWords(readWords('words.txt')).iteritems():
        writeWords(OUTF(wordLen), wordList)

if __name__=="__main__":
    main()

撰写回答