【问题标题】:turning data into a list将数据变成列表
【发布时间】:2012-11-07 15:33:21
【问题描述】:

我使用我编写的程序合并了两个 .txt 文件。现在,一旦我将这两个 .txt 文件组合在一起,我就会得到一个未排序的数据组合。

我的数据是这样的

Bud Abbott 51 92.3
Mary Boyd 52 91.4
Hillary Clinton 50 82.1
Don Adams 51 90.4
Jill Carney 53 76.3
Randy Newman 50 41.2

但我希望它看起来像这样

 ['Bud', 'Abbott', 51, 92.3]
 ['Don', 'Adams', 51, 90.4]
 ['Mary', 'Boyd', 52, 91.4]
 ['Jill', 'Carney', 53, 76.3]
 ['Hillary', 'Clinton', 50, 82.1]
 ['Randy', 'Newman', 50, 41.2]

如何将我拥有的变成我想要的

顺便说一句,我必须得到我的第一组数据的代码看起来像这样

def ReadAndMerge():

     library1=input("Enter 1st filename to read and merge:")
     with open(library1, 'r') as library1names:
          library1contents = library1names.read()
     library2=input("Enter 2nd filename to read and merge:")
     with open(library2, 'r') as library2names:
          library2contents = library2names.read()

     print(library1contents)
     print(library2contents)
     combined_contents = library1contents + library2contents  # concatenate text



     file = combined_contents
     lines = []

     for l in file:
          line = l.strip().split(" ")
          lines.append(line)


     lines.sort(key=lambda lines: lines[1])

     for line in lines:
          print(line)

print(combined_contents)
return(combined_contents)

ReadAndMerge()

图书馆1和图书馆2分别是这样的

Bud Abbott 51 92.3
Mary Boyd 52 91.4
Hillary Clinton 50 82.1



Don Adams 51 90.4
Jill Carney 53 76.3
Randy Newman 50 41.2

我如何让它被排序并在一个列表中

我用你的新行更新了我的程序,但是当我运行它时,我不断收到这个错误

Traceback (most recent call last):
 File "C:/Users/Shane/Documents/Amer CISC/readandmerge.py", line 30, in <module>
ReadAndMerge()
 File "C:/Users/Shane/Documents/Amer CISC/readandmerge.py", line 23, in ReadAndMerge
lines.sort(key=lambda lines: lines[1])
 File "C:/Users/Shane/Documents/Amer CISC/readandmerge.py", line 23, in <lambda>
lines.sort(key=lambda lines: lines[1])
 IndexError: list index out of range
 >>> 

【问题讨论】:

    标签: list sorting python-3.x transform


    【解决方案1】:
    def getListOfLinesInFile(file): 
        file = open(file, "r")
        lines = []    
        for l in file:
            line = l.strip().split(" ")
            lines.append(line)
        file.close()
        return lines
    

    要在您的程序中使用它,只需使用您的 ReadAndMerge -function 即可:

    def ReadAndMerge():
        library1 = input("Enter 1st filename to read and merge: ")
        library1_list = getListOfLinesInFile(library1)
    
        library2 = input("Enter 2nd filename to read and merge: ")
        library2_list = getListOfLinesInFile(library1)
    
        library_merged = library1_list + library2_list
        library_merged.sort(key=lambda library_merged: library_merged[1])
    
        print(*library_merged)
        return library_merged
    

    【讨论】:

    • 但由于我想按姓氏而不是名字对它们进行排序,所以我只是在列表中调用位置
    • 您的程序所做的是将每个字母、数字和空格转换为自己的列表,将 bud abbott 51, 92.3 转换为 ['B'], ['u'], [' d'], [''], ['A'], ['b'], ['b'], ['o'], ['t'], ['t'], [''], ['5'], ['1'], [''], ['9'], ['2'], ['.'], ['3'] 我需要它是 ['Bud', '雅培', 51, 92.3]
    • 我对代码做了一个小的编辑,但它应该也可以更早地工作,而且对我来说效果很好。它旨在打开其中包含所有合并数据的文件,确保您的文本文件与您在主帖子的第一个代码框中的文本完全相同。
    • 好的,我想我知道我的问题出在哪里了。您编写了一个程序,该程序在文件位置工作,而我的数据只是在变量名位置。正如您从我上面的代码中看到的,所有这些名称都在变量名combined_contents 中。你知道你是否可以编辑你的程序来处理一个变量名,或者你知道我如何将 combine_contents 变成一个文件位置
    • 我确实对其进行了一些编辑,这将摆脱原始文本,但您应该能够根据自己的喜好进行编辑,只需一点点研究和谷歌的帮助。我不太确定您需要保存哪些数据,它当前只返回一个包含两个文件的列表。
    猜你喜欢
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多