【问题标题】:How can I open csv files and read them and sort them based on the data inside it?如何打开 csv 文件并读取它们并根据其中的数据对其进行排序?
【发布时间】:2022-01-11 17:48:42
【问题描述】:

所以我正在尝试找到如何打开 csv 文件并对其中的所有详细信息进行排序...

因此,CSV 文件中包含的数据示例是...

2,8dac2b,ewmzr,jewelry,phone0,9759243157894736,us,69.166.231.58,vasstdc27m7nks3
1,668d39,aeqok,furniture,phone1,9759243157894736,in,50.201.125.84,jmqlhflrzwuay9c
3,622r49,arqek,doctor,phone2,9759544365415694736,in,53.001.135.54,weqlhrerreuert6f

所以我试图让函数sortCSV(File) 打开 CSV 文件根据第一个数字对其进行排序,即 0、1 ....

所以输出应该是

1,668d39,aeqok,furniture,phone1,9759243157894736,in,50.201.125.84,jmqlhflrzwuay9c
2,8dac2b,ewmzr,jewelry,phone0,9759243157894736,us,69.166.231.58,vasstdc27m7nks3
3,622r49,arqek,doctor,phone2,9759544365415694736,in,53.001.135.54,weqlhrerreuert6f

到目前为止,这是我的代码,显然不起作用....

import csv
def CSV2List(csvFilename: str):
    f = open(csvFilename)
    q = list(f)
    return q.sort()

我应该对我的代码进行哪些更改以确保我的代码正常工作??

【问题讨论】:

  • 请查看Pandas而不是csv
  • 您必须在打开文件后读取文件中的数据。
  • 如果你从不使用csv,为什么还要导入它?

标签: python list function


【解决方案1】:

使用pandas,将第一列设置为索引并使用sort_index根据您的索引列进行排序:

import pandas as pd
file_path = '/data.csv'
df = pd.read_csv(file_path,header=None,index_col=0)
df = df.sort_index()
print(df)

【讨论】:

    【解决方案2】:

    有很多方法可以解决这个问题,但最简单的方法之一是安装 Pandas (https://pandas.pydata.org/)。

    首先,您很可能需要每列的一些标题,这些标题应位于 CSV 文件的第一行。添加列标题并安装 pandas 后:

    使用熊猫:

    import pandas as pd 
    
    dataframe = pd.read_csv(filepath, index=0)
    

    这会将第一列设置为索引列,并将按索引排序。


    另一种我不得不处理格式困难的 CSV:s(也就是导出表单 excel 等)的方法是将文件作为常规文件读取,然后迭代行以自行处理。

    final_data = []
    with open (filepath, "r") as f:
        for row in f:
            # Split the row
            row_data = row.split(",")
            # Add to final data array
            final_data.append(row_data
    
    # This sorts the final data based on first row
    final_data.sort(key = lambda row: row[0])
    
    # This returns a sorted list of rows of your CSV
    return final_data
    

    【讨论】:

      【解决方案3】:

      试试 csv.reader(文件名)

      import csv
      def CSV2List(csvFilename: str):
          f = open(csvFilename)
          q = csv.reader(f)
          return q.sort(key=lambda x: x[0])
      

      【讨论】:

        【解决方案4】:

        使用csv 模块:

        import csv
        
        def csv_to_list(filename: str):
           # use a context manager here
            with open(filename) as fh:
                reader = csv.reader(fh)
                # convert the first item to an int for sorting
                rows = [[int(num), *row] for num, *row in reader]
        
            # sort the rows based on that value
            return sorted(rows, key=lambda row: row[0])    
        

        【讨论】:

          【解决方案5】:

          这不是处理 CSV 文件的最佳方式,但是:

          def CSV2List(csvFilename: str):
              f = open(csvFilename,'r')
              l = []
              for line in f:
                  l.append(line.split(','))
          
              for item in l:
                  item[0] = int(item[0])
          
              return sorted(l)
          
          
          print(CSV2List('data.csv'))
          

          不过我可能会改用 pandas,它是一个很棒的模块

          【讨论】:

          • 所以我只是从 pandas 说,导入 csv,然后做你做的同样的事情吗?
          • 在这种情况下,您不需要导入 csv,脚本仍然可以工作。但是,如果您想使用 pandas 而不是 vanilla python 正确处理 csv 文件,我会查看其他答案。
          • 我从我的答案中删除了 csv 导入,因为它没有必要。
          猜你喜欢
          • 2011-08-04
          • 2017-02-14
          • 1970-01-01
          • 2018-11-01
          • 2020-02-04
          • 1970-01-01
          • 2013-10-14
          • 1970-01-01
          • 2023-03-09
          相关资源
          最近更新 更多