【问题标题】:Customized sorting objects with multiple data fields, python具有多个数据字段的自定义排序对象,python
【发布时间】:2014-12-18 00:39:33
【问题描述】:
 def sortIt ():
    with open('changed.csv') as infile, open ('sorted.csv','w') as outfile:
    arr = []
    for line in infile:
        if not line:
            info = line.split (',')
            arr.append(information(info[0],info[1],info[2],info[3],info[4]))
    arr.sort(key=lambda y:y.b)
    for x in range (len(arr)):
      outfile.writerow(arr[x].a+","+arr[x].b+","+arr[x].c+","+arr[x].d+","+arr[x].e)

所以我正在从双倍行距的 csv 文件中读取数据。然后我想将它们存储为一个数组。接下来,我想按字符串“b”对数组进行排序。 将它们打印到另一个名为“sorted”的 csv 文件中

问:我不确定这段代码有什么问题,它不会将排序后的数组打印到输出文件中。

预期输入:嗨,你,是,不是,坏
什么,是,向上,男人,?
预期输出:what,is,up,man,?
嗨,你,不是,坏

**编辑:信息是我创建的具有变量的对象:a、b、c、d、e。所以 changed.csv 是我将从中读取数据(字符串类型)的文件。文件中的每一行数据包含 5 个不同的东西 (a,b,c,d,e),用“,”分隔。然后我单独阅读每一行并得到 5 个不同的东西(a、b、c、d、e)。然后由于它没有按任何特定顺序排序,我将它存储在一个数组中以便我可以对其进行排序。所以'b'变量是字符串。我所说的按“b”排序的意思是按升序(字母顺序)对字符串进行排序。例如,“a”在“c”之前,“apple”在“banana”之前。按此顺序排序后,我想将它们全部打印到一个文件“sorted.csv”中。这样我以后可以在我想要使用二进制搜索的特定数据时访问它(因为它是排序的)。我的问题是,在我运行该函数后,我没有看到任何写在“sorted.csv”中的东西。抱歉对问题的描述含糊不清,我意识到我真的需要努力解释我的想法。

【问题讨论】:

  • 你有什么问题?
  • 输入文件和预期输出的任何示例?
  • @Marcin 编辑预期的输入和输出
  • @FamilyMaze 抱歉,您的问题不是很清楚。例如,informaton 是什么?什么是changed.csv 和sorted.csv? “按字符串“b”对数组进行排序”是什么意思?请澄清你的问题。否则,很难说出发生了什么。

标签: python sorting object csv


【解决方案1】:

感谢您的更新,我修改了您的代码并制作了虚拟信息类以便能够运行您的代码。

class information():

    def __init__(self, a,b,c,d,e):
        self.a = a
        self.b = b
        self.c = c
        self.d = d
        self.e = e

    def __str__(self):
        return ",".join([self.a, self.b, self.c, self.d, self.e])

    def __repr__(self):
        return self.__class__.__name__ + ': ' + self.__str__()



def sortIt():
    with open('data.csv', 'r') as infile, open ('sorted.csv','w') as outfile:
        arr = []

        for line in infile:
            if line:
                info = line.rstrip().split(',')
                arr.append(information(*info))

        print(arr)
        arr.sort(key=lambda y:y.b)
        print(arr)

        outfile.write("\n".join(map(str,arr)))


sortIt()

打印函数的结果:

[information: hi,you,are,not,bad, information: what,is,up,man,?]
[information: what,is,up,man,?, information: hi,you,are,not,bad]    

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 2020-05-09
    • 2020-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多