Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 解析CSV文件以在Python中查找不同的列_Python 2.7_Group By_Itertools - Fatal编程技术网

Python 2.7 解析CSV文件以在Python中查找不同的列

Python 2.7 解析CSV文件以在Python中查找不同的列,python-2.7,group-by,itertools,Python 2.7,Group By,Itertools,我有一个约3000行的CSV文件,格式如下列标题: STORE|BRAND ID|ZONE|SHORT DESCRIPTION (ZONE)|REGION|SHORT DESCRIPTION (REGION)|DISTRICT|SHORT DESCRIPTION (DISTRICT) 以下是该数据的示例: 0010|Company A|0001|East|123|New England|012|Connecticut 0010|Company B|0002|West|456|Coast|010

我有一个约3000行的CSV文件,格式如下列标题:

STORE|BRAND ID|ZONE|SHORT DESCRIPTION (ZONE)|REGION|SHORT DESCRIPTION (REGION)|DISTRICT|SHORT DESCRIPTION (DISTRICT)
以下是该数据的示例:

0010|Company A|0001|East|123|New England|012|Connecticut
0010|Company B|0002|West|456|Coast|010|Oregon
0025|Company A|0001|East|246|South|010|Florida
0010|Company A|0004|West|456|Coast|011|California
文件中存在重复的分区、区域和地区。我试图完成的是按区域、区域和每个品牌的区域汇总数据,如下所示:

:区域:

0001|Company A|East
0002|Company B|West
0004|Company A|West
123|Company A|New England
456|Company B|Coast
246|Company A|South
012|Company A|Connecticut
010|Company A|Oregon
010|Company B|Florida
011|Company A|California
:地区:

0001|Company A|East
0002|Company B|West
0004|Company A|West
123|Company A|New England
456|Company B|Coast
246|Company A|South
012|Company A|Connecticut
010|Company A|Oregon
010|Company B|Florida
011|Company A|California
:地区:

0001|Company A|East
0002|Company B|West
0004|Company A|West
123|Company A|New England
456|Company B|Coast
246|Company A|South
012|Company A|Connecticut
010|Company A|Oregon
010|Company B|Florida
011|Company A|California
下面的代码利用itertools/groupby,运行良好,可以根据需要为我提供数据,但是,从我读取文件、查找不同的区域、再次读取文件、查找不同的区域、第三次读取文件和查找不同的区域的意义上讲,它让我感到困扰。我认为必须有一种更精简的方法来读取此文件并聚合此数据

with file(myFile, 'r') as f:
        content = f.read()

csv.register_dialect('piper', delimiter='|', quoting=csv.QUOTE_NONE)

with open(myFile) as csvfile:
        reader = csv.DictReader(csvfile, dialect='piper')

        zones_dict = sorted(list(reader), key=itemgetter('ZONE','SHORT DESCRIPTION (ZONE)','BRAND ID'))     

        csvfile.seek(0)
        reader = csv.DictReader(csvfile, dialect='piper')

        regions_dict = sorted(list(reader), key=itemgetter('REGION', 'SHORT DESCRIPTION (REGION)', 'BRAND ID', 'ZONE'))

        csvfile.seek(0)
        reader = csv.DictReader(csvfile, dialect='piper')

        districts_dict = sorted(list(reader), key=itemgetter('DISTRICT', 'SHORT DESCRIPTION (DISTRICT)', 'BRAND ID', 'REGION'))

        ###
        #Aggregate Zone#
        ###

        for zone_id, zone_group in groupby(zones_dict, itemgetter('ZONE','SHORT DESCRIPTION (ZONE)','BRAND ID')):
            theZone = zone_id
            print theZone[0]

        print " "

        ###
        #Aggregate Region#
        ###

        for region_id, region_group in groupby(regions_dict, itemgetter('REGION', 'SHORT DESCRIPTION (REGION)', 'BRAND ID', 'ZONE')):
            theRegion = region_id
            print theRegion[0]

        print " "

        ###
        #Aggregate District#
        ###

        for district_id, district_group in groupby(districts_dict, itemgetter('DISTRICT', 'SHORT DESCRIPTION (DISTRICT)', 'BRAND ID', 'REGION')):
            theDistrict = district_id
            print theDistrict[0]

关于更好的方法有什么想法吗?

这听起来像是为数据库设计的。能否将CSV文件插入数据库并查询结果?请尝试查看。一个
DataFrame
正是您在这里所需要的。如果将此数据导入到db中的工作在我的任务范围内,那么它已经完成了,我会有更多的头发剩下;)尽管如此,我还是很欣赏这个建议:)我在想一些类似sqlite的东西。我以前没有实际使用过它,所以我可以在背后说出来,但据我所知,使用它不需要访问db服务器。但如果一个db不存在,那么一个db就不存在了:(