在csv txt或任何其他文件中按字母顺序对行进行排序

时间:2019-06-08 02:08:35

标签: python file-io

我需要编写一个程序来提示用户输入任何文件名,逐行加载数据,删除所有重复的行,按字母顺序对行进行排序,然后将其余行写入另一个文件。

我已经完成了大部分代码,但是我正在努力按字母顺序对行进行排序。有什么建议吗?

提前感谢您的帮助!

def deleteDuplicateRecords(fileName):
    try:
        newFileName="filtered_"+fileName
        with open(fileName,'r') as readFile, open(newFileName,'w') as writeFile:
            lineSet = set()
            for line in readFile:
                if line not in lineSet: 
                    lineSet.add(line)
                    writeFile.write(line)
        readFile.close()
        writeFile.close()
        print(f"Duplicate rows removed succesfully. Open the new file '{newFileName}'")
    except FileNotFoundError:
        print("File Not Found")

name = input("Enter the name of the text file including the proper extension (.txt, .csv, etc): ")
print()

deleteDuplicateRecords(name)

3 个答案:

答案 0 :(得分:1)

这应该有效:

def deleteDuplicateRecords(fileName):
    try:
        newFileName="filtered_"+fileName
        with open(fileName,'r') as readFile, open(newFileName,'w') as writeFile:
            for sorted_line in sorted({line for line in readFile}):
                writeFile.write(sorted_line)
        print(f"Duplicate rows removed successfully. Open the new file '{newFileName}'")
    except FileNotFoundError:
        print("File Not Found")

一些注意事项:

  1. 如其他人所述,如果您使用with,则在作用域结束时,这将自动关闭文件。
  2. 如果使用集合,则不会将重复项添加到列表中,因此没有理由检查列表中是否已存在该项
  3. 如果您有可迭代项(列表,集合等),则可以简单地使用sorted函数对结果进行排序
  4. {line for line in readFile}行使用set comprehension从文件的各行以更简洁的方式创建一个集合。

答案 1 :(得分:0)

  1. 累积一组线
  2. sorted将集合排序,这将返回一个列表
  3. 然后将这些行写入输出文件

BTW使用with语句意味着您无需手动关闭文件。

答案 2 :(得分:0)

您可以阅读本文档的所有排序方法。 https://docs.python.org/3/howto/sorting.html 返回后,将排序到您的输出中。