按单个列对多个csv文件(在一个目录中)进行排序

时间:2016-05-12 17:36:40

标签: python sorting csv

我是python编码的新手,所以任何建议都会有所帮助!我必须创建一个函数,将所有csv文件放在一个目录中,并按其各列进行排序。每个csv文件必须按第一列(日期)排序,然后按第二列(时间)排序,然后按第三列(活动)排序。

我对数据进行了排序,但它将所有文件合并在一起。如何将文件彼此分开?

import glob
data=[]
path="/Users/sara/Desktop/*.csv"
files=glob.glob(path)
for file in files:
    f=open(file, "r")
    for line in f:
        data.append(line)
data=sorted(data, key=lambda x:(x[0],x[1],x[2]))
print(sorted(data))

2 个答案:

答案 0 :(得分:1)

好吧所以你似乎将每个文件中的信息附加到同一个列表中,我建议你做一个列表列表如下

import glob
data=[]
path="/Users/sara/Desktop/*.csv"
files=glob.glob(path)
sorted_files = []
for file in files:
    f=open(file, "r")
    for line in f:
        data.append(line)

    data=sorted(data, key=lambda x:(x[0],x[1],x[2]))
    sorted_files.append(data)

for sorted_file in sorted_files:
    print(sorted(sorted_file))

因此,每当文件被完全读取并排序时,它会将该列表附加到列表sorted_files,以便打印出单独排序的每个文件,您可以像这样访问,sorted_files[0]这会给你第一个排序文件

答案 1 :(得分:0)

使用dict存储已排序的列表,

import csv
import operator
import glob

data = dict() # filename : lists

path="/Users/sara/Desktop/*.csv"
files=glob.glob(path)

for filename in files:
    # process each file
    with open(filename, 'r') as f:
        # read file to a list of lists
        lists = [row for row in csv.reader(f, delimiter=',')]
        # sort and save into a dict
        data[filename] = sorted(lists, operator.itemgetter(0, 1, 2))

现在您可以获取给定文件名的排序列表

lists = data[filename]