问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python对多个csv文件里提取指定列汇总到一个新生成的csv文件

发布网友 发布时间:2022-04-23 12:00

我来回答

3个回答

热心网友 时间:2022-04-10 16:52

#!/usr/bin/env python
# coding: utf-8

import os
import re


def parserln(ln, patt):
    """用给定的正则表达式解析行"""
    matched = patt.match(ln)
    if matched:
        return matched.groupdict()


def getdata(filename, parser, callback=None):
    """用指定的解析方法parser解析指定文件,
        用callback进行数据加工过的数据列表
    """
    with open(filename, 'rt') as handle:
        return map(
            callback,
            filter(None, map(parser, handle))
            )


def storage(filename, dataserial, spliter=','):
    """将数据序列按行存储到指定文件,
        每一序列元素间用指定的字符分割"""
    with open(filename, 'wt') as handle:
        handle.writelines([
            "%s\n" % (spliter.join(map(str, item)))
            for item in dataserial
        ])


if __name__ == "__main__":
    patt = re.compile(
        r"""^
        (?P<month>\d+),
        (?P<amount>\d+),
        (?P<usage>\d+)
        \s*$""",
        re.I | re.U | re.X)
    datapath = 'datasource'
    # datasource下所有存在"usage.csv"文件的子目录
    subpaths = [
        os.path.join(datapath, path)
        for path in os.listdir(datapath)
        if (os.path.isdir(os.path.join(datapath, path))
            and os.path.exists(
                os.path.join(datapath, path, "usage.txt"))
            )
        ]
    storage(
        'store.csv',
        zip(*map(
            lambda path: getdata(
                os.path.join(path, "usage.csv"),
                # 解析方法为用patt解析行
                parser=lambda ln: parserln(ln, patt),
                # 数据加工方法是取出"amount"转成整数
                callback=lambda x: int(x["amount"]),
            ),
            subpaths))
        )

$ tail -n 12 datasource/*/*.csv
==> datasource/2014/usage.csv <==
1,4234,423
2,3523,432
3,4352,438
4,4792,458
5,4823,834
6,5093,734
7,4743,832
8,5152,859
9,4932,810
10,4993,802
11,4999,810
12,5052,850

==> datasource/2015/usage.csv <==
1,5234,423
2,4523,432
3,5352,438
4,5792,458
5,6823,834
6,6093,734
7,6743,832
8,7152,859
9,6932,810
10,6993,802
11,6999,810
12,7052,850
(venv)tim@crunchbang:~/workspace/$

$ cat store.csv
4234,5234
3523,4523
4352,5352
4792,5792
4823,6823
5093,6093
4743,6743
5152,7152
4932,6932
4993,6993
4999,6999
5052,7052
$



热心网友 时间:2022-04-10 18:10

1.首先下载python 2.7,进行安装
2.教你一个简单的csv操作的例子
如下面为一csv文件:
Title,Release Date,Director
And Now For Something Completely Different,1971,Ian MacNaughton
Monty Python And The Holy Grail,1975,Terry Gilliam and Terry Jones
Monty Python's Life Of Brian,1979,Terry Jones
Monty Python Live At The Hollywood Bowl,1982,Terry Hughes
Monty Python's The Meaning Of Life,1983,Terry Jones
打印发行日期及标题。
逐行处理:
for line in open("samples/sample.csv"):
title, year, director = line.split(",") //以“,”号为分割,按逗号将数据分成三部分;
print year, title
使用csv模块处理:
import csv
reader = csv.reader(open("samples\sample.csv"))
for title, year, director in reader:
print year, title
改变分隔符

热心网友 时间:2022-04-10 19:45

csv 是可以直接当文本直接读的,他的格式是一行由若干列逗号隔开的
和文本文件一样的读到csv后,用逗号分隔列,然后将您需要的那一列写到新的文件里就可以了
只提供思路,我就不写代码了,可能会用有 open split readline
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
心理咨询师培训怎么收费标准是多少 2024心理咨询师培训费用是多少钱 心理咨询师培训费用大概是多少 心理咨询师培训课程收费标准 新蒙迪欧空调怎么用? 福特蒙迪欧16款2.0T冷车启动怠速会一抖一抖的是什么情况 牛油果冻了还能吃不 牛油果冻过了能吃吗 泰兴人很有钱吗? 江苏有多少百万人口以上的城市 line APP是什么,怎么运用 披头士的专辑有哪些? 我想问一下啊 有个聊天交友的软件叫line的 这个我要怎么样下载呢 我是 我想下载一个韩国的APP叫line请问怎么下载。 美国好莱坞景点介绍 洛杉矶好莱坞 LINE app怎么下载? 翻译短文 请帮忙翻译一下? 初一英语题目,不知道做。求高人解答。 帮我翻译下【英语高手进来】 请翻译这篇文章 洛杉矶 好莱坞简介 英语阅读翻译 Hollywood Bowl用汉语怎么翻译恰当?谢谢! Hollywood Bowl用汉语怎么翻译恰当? 什么是hollywood bowl? 梦见邻居家有很多蟑螂,到处乱爬是什么意思? 骆驼祥子的主要事件? 《骆驼祥子》 提10个问题并回答 机器人哪里买? Los Angeles 的景点介绍 英文(最好有图片,译文) 哪款手机可以使用line这个软件 天津哪个商场卖机器人扫地机 好莱坞是什么? 我的手机是安卓的,为什么不能下载line,每次下到一半就断网了。。。不懂啊。。。网速好好的。 蔚来车里的机器人哪里有卖的 美国好莱坞为什么称为电影城 想买个智能机器人陪老爸,免得晚年寂寞,哪有卖的啊? 为什麼手机下载安卓版line,一直打不开,一直出现 成都有云鲸扫地机器人专卖店? 交的个人社保小孩上学可以用吗? 房子有贷款离婚后怎么减名字 哪里有卖人工智能机器人? 安卓手机怎么使用Line? 个人交的社保小孩可以上学吗? 陪伴机器人在中国哪里有卖? 请问要在房产证上减少一个人名该怎么办? 海尔小帅机器人哪里有卖? 三星手机上的Line现在在国内怎么用